Image.Save()抛出exception“Value不能为null ./r/nParameter name:encoder”

我使用RawFormat保存位图图像时收到“值不能为空。\ r \ nParameter name:encoder”错误。 示例代码:

class Program { static void Main(string[] args) { try { var image = new System.Drawing.Bitmap(500, 400); var stream = new MemoryStream(); image.Save(stream, image.RawFormat); } catch (Exception exp) { Console.WriteLine(exp.ToString()); } } } 

现有的ImageEncoders列表中不存在RawFormat,因为下面的代码返回null。

var imageCodecInfo = ImageCodecInfo.GetImageEncoders().FirstOrDefault(codec => codec.FormatID == image.RawFormat.Guid);

注意:图像可以是任何类型(JPEG,BMP,PNG)等.Image.Save()应该在image.RawFormat上工作。 RawFormat不是Bitmap类型。 如果我将image.RawFormat更改为ImageFormat.Bmp,则保存操作会成功。

参考下面的链接,但没有找到任何使其独立于图像类型。

Image.Save崩溃:{“值不能为空。\ r \ nParameter name:encoder”} 为什么Image.Save(Stream,ImageFormat)会抛出exception?

欢迎任何建议。

如果从磁盘加载图像,则可以使用image.RawFormat以原始格式保存该图像。 但是,没有与内存中位图相关联的编码器(这是您在此示例应用程序中创建的),因此您必须自己指定图像格式(即ImageFormat.Bmp )。

你可以使用它,它将被修复:

 image.Save(stream,ImageFormat.Jpeg);