Image.Save()抛出异常&“值不能为空”./r/nParameter name: encoder"

本文关键字:nParameter name encoder 值不能为空 quot Save 抛出异常 不能 Image | 更新日期: 2023-09-27 18:17:22

我得到"值不能为空"。'r'n参数名称:encoder"使用RawFormat保存位图图像时出错。示例代码:

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());
        }
    }
}

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

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

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

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

形象。保存崩溃:{"值不能为空。'r'n参数名称:encoder"}为什么是Image ?Save(Stream, ImageFormat)抛出异常?

Image.Save()抛出异常&“值不能为空”./r/nParameter name: encoder"

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

你可以这样做,它将被修复:

image.Save(stream,ImageFormat.Jpeg);