2011-01-12 56 views
3

我有一个具有透明度信息的Delphi位图(32Bit)。我需要将其转换并保存为PNG文件,同时保持透明度。在Delphi 2007中保存带有PNG透明度的位图

我现在拥有的工具是graphics32 Library,GR32_PNG(Christian Budde)和PNGImage(by Gustavo daud)。

这样做的最好方法是什么?

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

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

回答

3

我无法得到其他两个工作的答案。他们可能为别人工作,但这是我所做的。

  1. 我用透明度创建了位图。
  2. 从Graphics 32库中将其分配给TBitmap32。
  3. 它指定给TPortableNetworkGraphics32从基督教布德的GR32_PNG为Graphics32
  4. 叫TPortableNetworkGraphics32.SaveToFile方法
1

看看这个link

还有一个功能:

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

寻找在函数的代码看来,它不仅使1个色透明的,而不是不同水平那我需要。 (有更新的问题,以清楚)。不过,我仍然通过从提供的链接创建PNGUnit和PNGLib来尝试它。当调用函数时,程序开始运行,但在它显示主窗体之前关闭,没有任何错误消息。感谢您的帮助。 – Tim 2011-01-12 17:36:38

4

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

如果我在程序中包含PNGImage单元,我创建的保存位图(在主要问题中检查编辑2)不再显示任何透明度信息。 – Tim 2011-01-12 19:18:13