裁剪图像有时是错误的区域

时间:2014-10-30 08:20:34

标签: c# image graphics png crop

我正在使用jQuery-cropbox在网络应用上裁剪图片。

在大多数情况下,一切都在顺利进行,但有时候生成的图像是错误的,就好像裁剪是用错误的坐标一样。

举个例子,请考虑这个image

enter image description here

在cropbox中,我缩放并拖动,直到我得到:

enter image description here

但是当我点击裁剪按钮时,它会给我这个:

enter image description here

以下是裁剪代码:

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

发生了什么事?

1 个答案:

答案 0 :(得分:2)

您的图片(已发布)有72dpi;你的屏幕,因此你使用的图形可能有96dpi。

这会产生你看到的效果。

为了避免这种影响,只需将img的分辨率设置为将其绘制到Graphics对象中的分辨率之前:

img.SetResolution((int)g.DpiX, (int)g.DpiY);