使用RawFormat保存位图图像时,出现“值不能为空。\r\n参数名称:编码器”错误。
样例代码:

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不是位图类型。如果我将image.RawFormat更改为ImageFormat.Bmp,则保存操作成功。

引用以下链接,但没有发现使其与图像类型无关。

Image.Save crashing: {"Value cannot be null.\r\nParameter name: encoder"}
Why is Image.Save(Stream, ImageFormat) throwing an exception?

欢迎任何建议。

最佳答案

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

10-08 06:30