问题
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.
- I created the bitmap with transparency.
- Assigned it to a TBitmap32 from the Graphics 32 library.
- Assigned it to a TPortableNetworkGraphics32 from Christian Budde's GR32_PNG for Graphics32
- 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