我在 C# 中编写了一种裁剪图像的方法。它通过创建一个新的位图并在其上从原始图像中绘制一个指定的矩形(要裁剪的区域)来做到这一点。
对于我尝试过的图像,它会产生错误的结果。结果图像的大小是正确的,但内容就是它。就像图像被放大了 2 倍然后被裁剪。最终添加这一行修复了它:
result.setResolution(72, 72)
但为什么我需要一个解决方案?我只使用像素,从不使用英寸或厘米。另外,那么正确的分辨率是什么?
完整的代码是这个扩展方法:
public static Bitmap Crop(this Image image, int x, int y, int width, int height) {
Bitmap result = new Bitmap(width, height);
result.SetResolution(72, 72);
// Use a graphics object to draw the resized image into the bitmap.
using (Graphics graphics = Graphics.FromImage(result)) {
// High quality.
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
// Draw the image into the target bitmap.
graphics.DrawImage(image, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
}
return result;
}