如何使Bitmap透明和24bpp?

时间:2016-02-20 12:00:11

标签: c# mono png

此代码在Mono中创建32位png而不是24位png:

var bmp = new Bitmap(bmpWidth, bmpHeight, PixelFormat.Format24bppRgb);
bmp.MakeTransparent();
ImageCodecInfo pngCodec = ImageCodecInfo.GetImageEncoders().Where(codec => codec.FormatID.Equals(ImageFormat.Png.Guid)).FirstOrDefault();
if (pngCodec != null)
{
    EncoderParameters parameters = new EncoderParameters();
    parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 24);
    png.Save("mycopy.png", pngCodec, parameters);
}

File size increases after reading png file from disk and saving it back

我知道这是因为文件大小:

$ du -b *.png
506 original.png
611 mycopy.png

和pngcheck说

OK: mycopy.png (16x16, 32-bit RGB+alpha, non-interlaced, 40.3%).

而不是

OK: original.png (16x16, 24-bit RGB, non-interlaced, 34.1%).

这是因为Mono的MakeTransparent实现在内部创建32bpp Bitmap来处理透明度。

是否可以使用System.Drawing在单声道中创建透明的24bpp .png?

0 个答案:

没有答案