繁体   English   中英

Image.Save() 抛出异常“值不能为空。/r/n 参数名称:编码器”

[英]Image.Save() throws exception "Value cannot be null./r/nParameter name: encoder"

使用 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 崩溃:{“值不能为空。\\r\\n参数名称:编码器”} 为什么 Image.Save(Stream, ImageFormat) 会抛出异常?

欢迎任何建议。

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

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

image.Save(stream,ImageFormat.Jpeg);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM