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

我正在使用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);