我在我的应用程序中处理了许多不同的图像格式。幸运的是,我能够将处理图像格式的最大部分用于C#WPF。但是,我在保存图片时遇到了问题:
我想使用带有RGB配置文件的JpegBitmapEncoder将图像保存为JPEG。这适用于彩色图像格式。但是,当处理格式为Gray16或Gray8的图像时,生成的JPEG将具有灰度轮廓。我的JPEG格式确实需要RGB配置文件!
我知道我可以在Bgra32中创建一个新的WriteableBitmap,将数据复制到它并使用它来创建JPEG。然而,这意味着我需要自己处理不同的图像格式。最重要的是,我认为这种绕道计算效率非常低(我需要转换大量的图像数据!)。
此外,我无法使用C#/ WPF以外的任何解决方案(如Imagemagick)。
我希望有一种方法可以轻松有效地解决这个问题。我发现无法为此配置JpegBitmapEncoder,我尝试使用ColorConvertedBitmap但无济于事!
有什么想法吗?
答案 0 :(得分:0)
FormatConvertedBitmap的提示为我提供了解决问题的方法!谢谢RononDex!
FormatConvertedBitmap convertImg = new FormatConvertedBitmap(img, PixelFormats.Bgra32, null, 0);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(convertImg));
encoder.Save(stream);