此代码在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?