C# 为什么需要指定裁剪的分辨率?
我在C语言中编写了一个裁剪图像的方法。它通过创建一个新的位图并在其上绘制一个指定的矩形,该矩形是从原始图像裁剪的区域 对于我尝试过的图像,它产生了错误的结果。结果图像的大小是正确的,但内容是正确的。这就像是将图像放大了2倍,然后进行了裁剪。最后添加这一行修复了它:C# 为什么需要指定裁剪的分辨率?,c#,.net,image,resolution,crop,C#,.net,Image,Resolution,Crop,我在C语言中编写了一个裁剪图像的方法。它通过创建一个新的位图并在其上绘制一个指定的矩形,该矩形是从原始图像裁剪的区域 对于我尝试过的图像,它产生了错误的结果。结果图像的大小是正确的,但内容是正确的。这就像是将图像放大了2倍,然后进行了裁剪。最后添加这一行修复了它: result.setResolution(72, 72) 但为什么我需要一个决议?我只是处理像素,而不是英寸或厘米。另外,正确的解决方案是什么 此扩展方法的完整代码如下所示: public static Bitmap Crop(th
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;
}
我怀疑答案在于图书馆实际进行修改的方式。它只是复制并粘贴一些内存块。分辨率指定每个像素使用的位/字节数。为了知道需要复制多少字节,他需要知道每个像素使用了多少位/字节 因此,我认为这是一个简单的乘法,后跟一个memcopy
关于您使用的DrawImage重载不正确。 您应该使用指定Src和Dest rect的方法
graphics.DrawImage(image, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
试试看,如果不行,请在评论中告诉我。图像的格式不应该定义每个像素多少字节吗?是RGB吗?RGBA?它们是整数、多头还是浮动?然后复制我告诉它的像素。是的,是的。但该格式只有如何存储数据的信息。根据格式的不同,可能分辨率是可变的,因此格式无法准确地知道分辨率。我想浮动不适用。它是什么类型的格式?还是未知?如果忽略行结果会发生什么情况。SetResolution72,72;Regard我认为视频卡使用带浮点数的RGBA。如果我忽略分辨率,比如说,我用crop0,0,100,100得到一张100乘100的图像,一张大约60乘60的原始图片被拉伸。