裁剪图像有时是错误的区域
我正在使用jQuery-cropbox在Web应用程序上裁剪图像。
一切都在大部分时间内流畅运行,但有时生成的图像是错误的,就好像裁剪是用错误的坐标应用的。
例如,请考虑以下图像 :
在cropbox中,我缩放并拖动,直到我得到:
但是当我点击裁剪按钮时,它给了我:
这是裁剪代码:
private Bitmap CropImage(Image img, Rectangle rect) { Bitmap newImg = new Bitmap(rect.Width, rect.Height); Graphics g = Graphics.FromImage(newImg); g.DrawImage(img, -rect.X, -rect.Y); return newImg; } //... // save image var streamOut = new MemoryStream(); Bitmap newImg = CropImage(oldImg, rect); newImg.Save(streamOut, ImageFormat.Png);
oldImg
是先前发布的图像,是我用来裁剪的坐标。
我当然检查了rect中的坐标,它们是正确的。
作为参考,为了获得结果,如果坐标是(那些可能不完全准确,我从第二次测试中取得它们,所以我当然放置了不同的图片):
x: 47 y: 94 w: 150 h: 150
怎么了 ?
你的图片(已发布)有72dpi; 您的屏幕,因此您使用的图形可能有96dpi。
这将导致您看到的效果。
为了避免这种影响,只需在将其绘制到Graphics对象中的分辨率之前设置img
的分辨率:
img.SetResolution((int)g.DpiX, (int)g.DpiY);