我有一个具有透明度信息的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;

10-08 11:39