我正在调整可能具有 Alpha channel 的 png 图像的大小。
一切正常,但有一个异常(exception): 我在透明区域周围看到一些灰色像素。
原始图像没有任何阴影。
有办法解决这个问题吗?
我正在使用 Gustavo Daud 的 SmoothResize(请参阅 this question 的第一个答案)来调整 png 图像的大小。
我无法提供我正在使用的代码,因为它不是我编写的,也没有作者发布它的许可。
最佳答案
我怀疑这是由两件事引起的:PNG 中有趣的 RGBA 值和天真的调整大小代码。
您需要检查您的 PNG 内容。您正在透明区域中查找 RGB 值。尽管透明区域的 Alpha 值为 0,但它们仍然具有 RGB 信息。在你的情况下,我希望透明区域填充黑色 RGB 值。如果简单地完成调整大小,这可能会导致调整大小后出现灰色轮廓。示例:如果代码将 2 个调整像素 (0,0,0,0) 和 (255,255,255,255) 的大小调整为 1 个,会发生什么情况?两个像素各占 50%,结果为 128,128,128,128),即半透明灰色。当您放大例如 x1.5 时,也会发生同样的情况,原始两个像素之间添加的像素将是灰色的。通常这种情况不会发生,因为图像编辑软件足够智能,可以用最近的可见像素的颜色填充这些不可见的像素。
您可以尝试通过用白色(或图像边框上的其他颜色)填充透明区域来“修复”PNG。
另一种方法是使用高级调整大小代码(编写或查找库),它将忽略透明像素 RGB 值(例如,通过从最近的非透明像素获取 RGB)。
关于delphi - 在 Delphi 中调整 png 图像大小 - 不正确的 alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596172/