缩小后图像边框丢失

发布于 2024-12-29 19:30:34 字数 860 浏览 0 评论 0原文

当我使用 Graphics 类调整位图大小时,原始图像的一些右侧和底部像素被忽略。

下面是一个示例(原始、60x60、30x30):

original result60 result30

我的代码:

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):

original
result60
result30

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:

enter image description here
enter image description here
enter image description here
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

手长情犹 2025-01-05 19:30:34

将插值模式设置为 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.

盗心人 2025-01-05 19:30:34

这可能是调整大小过程本身的影响。根据所使用的算法,它可能会检测到边界处像素的红色不再像白色那样与整个图像相关,因此输出白色。

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.

遥远的绿洲 2025-01-05 19:30:34

我使用了这个解决方法来解决这个“错误”。当我调整标准电子商店商品照片的大小时,有些有灰色的左/上边框,有些则没有。所以你只要使用这段代码

g.DrawImage(src, -1, -1, width+1, height+1);

,它就能完美地工作。我还找到了一些关于像素模式的提示,或者尝试使用一些特殊的 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

g.DrawImage(src, -1, -1, width+1, height+1);

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文