当我使用Graphics类调整位图大小时,它会忽略原始图像的某些右边和底部像素。
以下是一个示例(原始版本,60x60,30x30):
我的代码:
foreach(int x in new[]{60, 30})
{
var result = new Bitmap(x, x);
var g = Graphics.FromImage(result);
g.DrawImage(new Bitmap(MediaDir + "original.png"), 0, 0, x, x);
result.Save(MediaDir + "result" + x + ".png", ImageFormat.Png);
}
我错过了什么吗?
编辑,这是使用HighQualityBicubic的结果:
答案 0 :(得分:3)
将插值模式设置为InterpolationMode.HighQualityBicubic
。
您可以在Microsoft Tutorial中查看参数的效果。左下角的示例与您的问题类似。
答案 1 :(得分:2)
这可能是调整大小过程本身的影响。根据所使用的算法,它可能检测到边框处像素的红色不再与白色图像的整体图像相关,因此输出白色。
答案 2 :(得分:0)
我使用了这个解决方法来发现" bug"。当我调整标准eshop项目照片的大小时,有些灰色左/上边框,有些没有。所以你只需使用这段代码
g.DrawImage(src, -1, -1, width+1, height+1);
它的工作完美。我也找到了一些关于pixelmode的提示或尝试使用一些特殊的attr和drawimage方法,但它对我不起作用。