Delphi 如何将DIB转换为TPNGObject?

Delphi 如何将DIB转换为TPNGObject?,delphi,delphi-7,dib,tpngimagelist,Delphi,Delphi 7,Dib,Tpngimagelist,我有一个DIB手柄。如何将其转换为TPNGObject,并保持其透明度 编辑: 我在这个解决方案中使用方法2 但是生成的位图是不透明的,即使我将其transparent标志设置为true我认为它将开始如下所示: var lpbi: PBitmapInfoHeader; begin // Get DIB header info from DIB handle lpbi := PBitmapInfoHeader(GlobalLock(hdIB)); end; 然后,如果它是一个32位的

我有一个DIB手柄。如何将其转换为
TPNGObject
,并保持其透明度

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


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

我认为它将开始如下所示:

var
  lpbi: PBitmapInfoHeader;
begin
  // Get DIB header info from DIB handle
  lpbi := PBitmapInfoHeader(GlobalLock(hdIB));
end;
然后,如果它是一个32位的图像,它将有一个alpha通道,您将使用它作为透明度数据


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

哪个Delphi和哪个PNG库?我使用Delphi 7,但我不明白你所说的库是什么意思,感谢你的关注:)D7有许多常用的PNG库。答案可能取决于你使用哪一个。对不起,大卫,我怎么知道lib呢?我只是在uses部分使用pngimage并定义一个TPNGOBject。有没有办法知道我使用哪一个库..默认情况下Delphi7无法处理PNG。因此,您有一个第三方库来处理和注册PNG图片。打开文件“pngimage.pas”,看看你有哪个库。我用这段代码来获取位图,如何操作它来提取png图像(即使我将其透明属性设置为true,得到的位图图像也不是透明的)@Sara,是的,TBitmap只支持一种透明颜色,并且它是与第一个像素匹配的任何颜色(左上角)。Gustavo Daud的TPNGObject支持完整的alpha通道。您可以使用扫描线和alpha扫描线属性逐像素将数据复制到。谢谢Marcus,但您能帮助我复制图像数据吗