我正在使用jQuery-cropbox在网络应用上裁剪图片。
在大多数情况下,一切都在顺利进行,但有时候生成的图像是错误的,就好像裁剪是用错误的坐标一样。
举个例子,请考虑这个image:
在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
我用来裁剪的坐标。
我当然检查了rect中的坐标,它们是正确的。
作为参考,要获得结果,如果坐标是(那些可能不完全准确,我从第二次测试中取出它们,所以我当然把图片放得有点不同):
x: 47
y: 94
w: 150
h: 150
发生了什么事?
答案 0 :(得分:2)
您的图片(已发布)有72dpi;你的屏幕,因此你使用的图形可能有96dpi。
这会产生你看到的效果。
为了避免这种影响,只需将img
的分辨率设置为将其绘制到Graphics对象中的分辨率之前:
img.SetResolution((int)g.DpiX, (int)g.DpiY);