【发布时间】:2012-01-03 01:10:54
【问题描述】:
我正在使用 GR32 绘制多个半透明 PNG 图像。 到目前为止,我一直在使用以下方法:
png:= TPNGObject.Create;
png.LoadFromFile(...);
PaintBox321.Buffer.Canvas.Draw(120, 20, png);
但是我想切换到 GR32 网站 (http://graphics32.org/wiki/FAQ/ImageFormatRelated) 上提出的方法:
tmp:= TBitmap32.Create;
LoadPNGintoBitmap32(tmp, ..., foo);
tmp.DrawMode:= dmBlend;
PaintBox321.Buffer.Draw(Rect(20, 20, 20+ tmp.Width, 20+tmp.Height),
tmp.ClipRect, tmp);
虽然第一种方法工作得很好,但第二种方法 - 应该给出相同的结果 - 会导致 alpha 通道出现非常奇怪的问题,请查看图像(它还显示了与 Paint.NET 中“排列”的相同图像的比较 - 两者背景和图标在编辑器的图层上打开)。该图像描述了 Bitmap32 加载或绘制不正确。有什么建议吗?
-- 11 月 22 日添加
我发现这不是关于绘图,而是关于将 PNG 加载到 BMP32。从 BMP32 保存回 PNG 会生成错误的“白化”(左侧)PNG 图像。
【问题讨论】:
-
我认为这是由于“不透明度”,您也设置了“tmp.DrawMode:= dmBlend;”,我没有使用过 GR32,但我猜这个差异是由于不透明度。
-
@Dorin Duminica,不是。他们网站上的示例显示,如果加载的 PNG 图像中有任何透明度,则模式应为 dmBlend。因为我知道我所有的图像都是透明的,所以我不必检查。
标签: delphi png transparency graphics32