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

时间:2013-09-03 15:35:19

标签: delphi image-resizing delphi-5 alpha-transparency

我正在调整可能具有Alpha通道的png图像。

一切都很好,但有一个例外: 我在透明区域周围有一些灰色像素。

原始图像没有任何阴影。

有没有办法解决这个问题/解决它?

wrong alpha value

我正在使用Gustavo Daud的SmoothResize(请参阅this question的第一个答案),以调整png图像的大小。

我无法提供我正在使用的代码,因为我没有写它并且没有作者的许可才能发布它。

1 个答案:

答案 0 :(得分:1)

我怀疑这是由两件事造成的:PNG中的搞笑RGBA值和天真的大小调整代码。

您需要检查您的PNG内容。您正在寻找透明区域中的RGB值。尽管透明区域的Alpha为0,但它们仍然具有RGB信息。在你的情况下,我希望透明区域充满黑色RGB值。如果天真地调整大小,那么在调整大小后可能会导致灰色轮廓。示例:如果代码将2个调整像素(0,0,0,0)和(255,255,255,255)调整为一个,会发生什么?两个像素贡献50%。结果是128,128,128,128),这是半透明灰色。当你升级例如x1.5时会发生同样的事情,原来的两个之间增加的像素将是灰色的。通常这种情况不会发生,因为图像编辑软件非常智能,可以用最近的可见像素填充那些不可见的像素。

您可以尝试通过填充白色(或图像边框上的其他颜色)的透明区域来“修复”PNG。

另一种方法是使用高级调整大小代码(写入或查找库),这将忽略透明像素RGB值(例如,通过从最接近的非透明像素获取RGB)。