【问题标题】:How to convert DIB to TPNGObject?如何将 DIB 转换为 TPNGObject?
【发布时间】:2011-11-27 11:52:48
【问题描述】:

我有一个 DIB 句柄。如何在保留透明度的情况下将其转换为 TPNGObject

编辑: 我在这个解决方案中使用方法2Here

但即使我将其Transparent 标志设置为true,生成的位图也不透明

【问题讨论】:

  • 哪个 Delphi 和哪个 PNG lib?
  • 我用的是 Delphi 7,但我不明白 lib 是什么意思,谢谢你的关心 :)
  • D7 有许多常用的 PNG 库。答案可能取决于您使用哪一个。
  • 对不起,大卫,但我怎么知道库?我只是在使用部分使用 pngimage 并定义一个 TPNGOBject。有没有办法知道我使用哪个库..
  • Delphi 7 默认不能处理 PNG。所以你有一个第三方库来处理和注册 PNG 图片。打开文件“pngimage.pas”,看看你有哪个库。

标签: delphi delphi-7 dib tpngimagelist


【解决方案1】:

我认为它会以这样的方式开始:

var
  lpbi: PBitmapInfoHeader;
begin
  // Get DIB header info from DIB handle
  lpbi := PBitmapInfoHeader(GlobalLock(hdIB));
end;

然后,如果它是 32 位图像,它将有一个 Alpha 通道,您将使用它来存储透明度数据。

然后,将 RGB 数据复制到 PNG 对象的扫描线,并将 alpha 数据复制到 alpha 扫描线。

【讨论】:

  • 我使用这段代码来获取位图,如何操作它来提取 png 图像(即使我将其透明属性设置为 true,生成的位图图像也不透明)
  • @Sara,是的,TBitmap 只支持单一透明颜色,它是与第一个像素(左上角)匹配的任何颜色。 Gustavo Daud 的 TPNGObject 支持完整的 Alpha 通道。您可以使用 scanline 和 alpha 扫描线属性逐像素复制数据。
  • 谢谢马库斯,但你能帮我看看如何复制图像数据
猜你喜欢
  • 2012-08-23
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多