Save Bitmap with transparency to PNG in Delphi 2007

断了今生、忘了曾经 提交于 2020-01-24 09:42:25

问题


I have a Delphi bitmap (32Bit) that has transparency information. I need to convert and save it to a PNG file while preserving the transparency.

The tools I currently have are the graphics32 Library, GR32_PNG (by Christian Budde), and PNGImage (by Gustavo daud).

What is the best way to do this?

EDIT 1 : There is not just one color in my bitmap that's transparent but pixels with varying levels of transparency that needs to be preserved.

EDIT 2 : I am getting my bitmap with alpha information by setting the background of an image to a PNG I have with nothing but an empty alpha layer. Then I write anti-aliased text onto it. I then save the bitmap. When opened with gimp it show the transparency and upon zooming in you can see the effect of anti-aliasing.


回答1:


Use PNGImage. In Delphi, try this:

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;

If that doesn't work for you, you'll probably have to copy over the alpha and RGB values individually.

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;



回答2:


I could not get either of the other two answer to work. They may work for others but here is what I did.

  1. I created the bitmap with transparency.
  2. Assigned it to a TBitmap32 from the Graphics 32 library.
  3. Assigned it to a TPortableNetworkGraphics32 from Christian Budde's GR32_PNG for Graphics32
  4. Called the TPortableNetworkGraphics32.SaveToFile method



回答3:


Check out this link

There is a function:

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


来源:https://stackoverflow.com/questions/4670533/save-bitmap-with-transparency-to-png-in-delphi-2007

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!