c# - Image.Save() 抛出异常 "Value cannot be null./r/nParameter name: encoder"

标签 c# .net image

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

现有的 ImageEncoder 列表中不存在 RawFormat,因为下面的代码返回 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) .

关于c# - Image.Save() 抛出异常 "Value cannot be null./r/nParameter name: encoder",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46765931/

相关文章:

c# - 使用 ClosedXML 另存为 pdf

c# - CaSTLe DynamicProxy - 'classToProxy' 必须是一个类

html - 在 IE9 中作为链接的图片

html - div 中的图像在图像下方有额外的空间

c# - 如何减少二进制/lambda 表达式?

python - 如何修复 "AttributeError: ' JpegImageFile' 对象没有属性 'read' ?

c# - 使用硬链接(hard link)模拟连接文件?

c# - 为什么 'foo' 返回空主体?

c# - 使用属性或扩展 json.net 库寻找 Hydra/Json-ld 序列化程序

.net - 尝试验证我的组合框时遇到问题