Ric*_*ich 13
我不认为对方的回答测试了他们的代码,因为GDI + PNG不支持Encoder.BitDepth EncoderParameter.事实上,唯一的Codec就是TIFF.
您需要在保存之前更改图像的PixelFormat,以便对输出产生任何影响.这并不总能产生您期望的PixelFormat.有关哪些PixelFormats变成什么的更多信息,请参阅我的帖子.
对于PixelFormat转换,以下内容将起作用:
private Bitmap ChangePixelFormat(Bitmap inputImage, PixelFormat newFormat)
{
Bitmap bmp = new Bitmap(inputImage.Width, inputImage.Height, newFormat);
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawImage(inputImage, 0, 0);
}
return bmp;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些转换会产生一些非常糟糕的输出.在执行有损转换(高位深度到较低位)的情况下尤其如此.
尝试这个:
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, 8);
myImage.Save(myStream, pngCodec, parameters);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19710 次 |
| 最近记录: |