在Delphi 2007中将透明位图保存为PNG

在Delphi 2007中将透明位图保存为PNG,delphi,png,delphi-2007,bmp,image-conversion,Delphi,Png,Delphi 2007,Bmp,Image Conversion,我有一个Delphi位图(32位),其中包含透明度信息。我需要转换并保存到一个PNG文件,同时保持透明度 我目前拥有的工具有graphics32库、GR32_PNG(由Christian Budde编写)和PNGImage(由Gustavo daud编写) 最好的方法是什么 编辑1:我的位图中不仅有一种颜色是透明的,而且需要保留具有不同透明度级别的像素 编辑2:通过将图像的背景设置为PNG,我得到了带有alpha信息的位图,我只有一个空的alpha层。然后我在上面写抗锯齿文字。然后保存位图。使用

我有一个Delphi位图(32位),其中包含透明度信息。我需要转换并保存到一个PNG文件,同时保持透明度

我目前拥有的工具有graphics32库、GR32_PNG(由Christian Budde编写)和PNGImage(由Gustavo daud编写)

最好的方法是什么

编辑1:我的位图中不仅有一种颜色是透明的,而且需要保留具有不同透明度级别的像素

编辑2:通过将图像的背景设置为PNG,我得到了带有alpha信息的位图,我只有一个空的alpha层。然后我在上面写抗锯齿文字。然后保存位图。使用gimp打开时,它会显示透明度,放大后,您可以看到抗锯齿的效果。

查看此项

有一个功能:

function WriteBitmapToPngFile( Filename : string; Bitmap : TBitmap; TransparentColor:TColor):boolean;

使用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;

另外两个答案我都找不到。他们可能为别人工作,但我就是这么做的

  • 我创建了具有透明度的位图
  • 从Graphics 32库将其分配给TBitmap32
  • 将其分配给Christian Budde的GR32_PNG Graphics32中的TPortableNetworkGraphics32
  • 调用TPortableNetworkGraphics32.SaveToFile方法

  • 查看函数中的代码,它似乎只使1种颜色透明,而不是我需要的不同级别。(已更新问题以明确这一点)。然而,我仍然通过从提供的链接创建PNGUnit和PNGLib来尝试它。调用函数时,程序开始运行,但在显示主窗体之前关闭,没有任何错误消息。感谢您迄今为止的帮助。如果我在程序中包括PNGImage单元,我创建的已保存位图(选中主问题中的编辑2)将不再显示任何透明度信息。