代码之家  ›  专栏  ›  技术社区  ›  beerwin

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

  •  3
  • beerwin  · 技术社区  · 12 年前

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

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

    原始图像没有任何阴影。

    有办法解决这个问题吗?

    wrong alpha value

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

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   Kromster Satyajit    12 年前

    我怀疑这是由两件事引起的:PNG中有趣的RGBA值和天真的调整大小代码。

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

    您可以尝试用白色(或图像边界上的另一种颜色)填充透明区域来“修复”PNG。

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