【问题标题】:Resize png image in Delphi - incorrect alpha channel在 Delphi 中调整 png 图像的大小 - 不正确的 alpha 通道
【发布时间】:2013-09-03 15:35:19
【问题描述】:

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

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

原始图像没有任何阴影。

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

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

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

【问题讨论】:

  • 也许this information 可以提供帮助。
  • 事实上,我在第一个答案(瑞安的答案)中使用了解决方案。不幸的是,正如其他答案所建议的那样,我不能使用外部库(部署限制)(尽管我会得到更好的结果)。第三个答案只是建议拉伸图像,但我们都知道拉伸有什么问题。 Graphics32 库似乎不适用于 Delphi 5(使用 D6 的功能)。

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


【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2011-07-01
    • 1970-01-01
    • 2017-01-01
    • 2016-07-26
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多