在Delphi中调整PNG图像大小 - 不正确的alpha通道

3
我正在调整可能带有 alpha 通道的 png 图像的大小。
一切都很好,只有一个例外: 在透明区域周围出现了一些灰色像素。
原始图像没有任何阴影。
有没有办法解决这个问题或绕过它?

wrong alpha value

我正在使用Gustavo Daud的SmoothResize(请参见this question的第一个答案)来调整PNG图像大小。
由于我没有编写该代码,也没有作者的发布许可,因此无法提供我正在使用的代码。

也许这份信息可以帮助。 - Ken White
实际上,我正在使用第一个答案中的解决方案(Ryan的答案)。不幸的是,我不能使用外部库(部署限制),正如其他答案所建议的那样(尽管我会得到更好的结果)。第三个答案只是建议拉伸图像,但我们都知道拉伸会带来哪些问题。Graphics32库似乎无法与Delphi 5一起使用(使用D6的特性)。 - beerwin
1个回答

1
我怀疑这是由两个原因引起的:PNG中有趣的RGBA值和幼稚的调整大小代码。 您需要检查PNG内容。您正在寻找透明区域中的RGB值。尽管透明区域的Alpha为0,但它们仍具有RGB信息。在您的情况下,我希望透明区域填充了黑色RGB值。如果调整大小是幼稚的,则可能会导致调整大小后出现灰色轮廓。例如:如果代码将两个相邻的像素(0,0,0,0)和(255,255,255,255)调整大小为一个像素会发生什么?两个像素都贡献了50%,结果是128,128,128,128,即半透明灰色。当您放大x1.5时,同样的事情会发生,原始两个像素之间添加的像素将变为灰色。通常不会发生这种情况,因为图像编辑软件足够聪明,可以使用最近可见像素的颜色填充这些隐形像素。
您可以尝试通过白色(或其他位于图像边界上的颜色)填充透明区域来“修复”PNG。
另一种方法是使用高级调整大小代码(编写或查找库),它将忽略透明像素的RGB值(例如通过从最接近的非透明像素中获取RGB)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接