在Delphi 2007中将透明位图保存为PNG
我有一个Delphi位图(32位),其中包含透明度信息。我需要转换并保存到一个PNG文件,同时保持透明度 我目前拥有的工具有graphics32库、GR32_PNG(由Christian Budde编写)和PNGImage(由Gustavo daud编写) 最好的方法是什么 编辑1:我的位图中不仅有一种颜色是透明的,而且需要保留具有不同透明度级别的像素 编辑2:通过将图像的背景设置为PNG,我得到了带有alpha信息的位图,我只有一个空的alpha层。然后我在上面写抗锯齿文字。然后保存位图。使用gimp打开时,它会显示透明度,放大后,您可以看到抗锯齿的效果。查看此项 有一个功能:在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层。然后我在上面写抗锯齿文字。然后保存位图。使用
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;
另外两个答案我都找不到。他们可能为别人工作,但我就是这么做的
查看函数中的代码,它似乎只使1种颜色透明,而不是我需要的不同级别。(已更新问题以明确这一点)。然而,我仍然通过从提供的链接创建PNGUnit和PNGLib来尝试它。调用函数时,程序开始运行,但在显示主窗体之前关闭,没有任何错误消息。感谢您迄今为止的帮助。如果我在程序中包括PNGImage单元,我创建的已保存位图(选中主问题中的编辑2)将不再显示任何透明度信息。