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

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

我正在调整可能具有 Alpha channel 的 png 图像的大小。

一切正常,但有一个异常(exception): 我在透明区域周围看到一些灰色像素。

原始图像没有任何阴影。

有办法解决这个问题吗?

wrong alpha value

我正在使用 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/

相关文章:

Delphi asm 到 purepascal

delphi - 替换delphi中的组件类

javascript - 在调整窗口大小时调整图像大小?

php - 使用 PHP 调整扭曲图像大小

python - UMat 很慢(OpenCV、Python)

delphi - 在 Delphi 5 中,Free 可以引发异常吗?

delphi - 在不同的 Delphi 版本之间发送 TStringList

android - 如何用Delphi XE5制作安卓动态壁纸?

delphi - 组合框不使用 vcl 样式突出显示颜色。

delphi - Delphi-如何监控网络