缩小后图像边框丢失
当我使用 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 的结果:
When I resize a bitmap using Graphics class, it seams that some right and bottom pixels of the original image are omited.
Here is an example (original, 60x60, 30x30):
my code:
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);
}
Am I missing something ?
edit, here is the result using HighQualityBicubic:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将插值模式设置为
InterpolationMode.HighQualityBicubic
。
您可以在 Microsoft 教程中查看该参数的效果。左下角的示例与您的问题类似。
Set the interpolation mode to
InterpolationMode.HighQualityBicubic
.You can see the effects of the parameter in a Microsoft Tutorial. The bottom left example has similar problems to yours.
这可能是调整大小过程本身的影响。根据所使用的算法,它可能会检测到边界处像素的红色不再像白色那样与整个图像相关,因此输出白色。
It is likely to be an effect of the resizing process itself. Depending on the algorithm used, it may be detecting the red colour of the pixels at the border as being no longer as relevant to the overall image as the white ones, so the white on is output.
我使用了这个解决方法来解决这个“错误”。当我调整标准电子商店商品照片的大小时,有些有灰色的左/上边框,有些则没有。所以你只要使用这段代码
,它就能完美地工作。我还找到了一些关于像素模式的提示,或者尝试使用一些特殊的 attr 和 drawimage 方法,但它对我不起作用。
i used this workaround fot that "bug". When i resized standart eshop item photo, some have gray left/top border and some not. So u just use this code
and its work perfectly. I also find some hints about pixelmode or try use some special attr with drawimage method but it doesnt work for me.