我有一个具有透明度信息的Delphi位图(32Bit)。我需要将其转换并保存为PNG文件,同时保持透明度。
我目前拥有的工具是graphics32库,GR32_PNG(由Christian Budde设计)和PNGImage(由Gustavo daud设计)。
做这个的最好方式是什么?
编辑1:在我的位图中不仅只有一种颜色是透明的,而且需要保留透明度不同的像素。
编辑2:通过将图像的背景设置为PNG,我得到了带有alpha信息的位图,而我只有空的alpha层。然后,在上面写上抗锯齿的文本。然后,我保存位图。当使用gimp打开时,它会显示透明效果,放大后您会看到抗锯齿的效果。
最佳答案
使用PNGImage。在Delphi中,尝试以下操作:
function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
oPNGDest: TPNGObject;
begin
oPNGDest := TPNGObject.Create;
try
oPNGDest.Assign(oBMPSrc);
oPNGDest.SaveToFile(sFilename);
finally
oPNGDest.Free;
end;
end;
如果这对您不起作用,则可能必须单独复制alpha和RGB值。
function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
oPNGDest: TPNGObject;
begin
oPNGDest := TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, oBMPSrc.Width, oBMPSrc.Height);
try
oPNGDest.CreateAlpha;
// Copy over RGB
..
// Copy over Alpha
..
// Save to file
oPNGDest.SaveToFile(sFilename);
finally
oPNGDest.Free;
end;
end;