为啥 Image.Save(Stream, ImageFormat) 会抛出异常?

Posted

技术标签:

【中文标题】为啥 Image.Save(Stream, ImageFormat) 会抛出异常?【英文标题】:Why is Image.Save(Stream, ImageFormat) throwing an exception?为什么 Image.Save(Stream, ImageFormat) 会抛出异常? 【发布时间】:2011-05-09 11:56:19 【问题描述】:

我正在尝试将图像转换为图标。我的功能是:

private Icon GenerateIcon(int width, int height)

    using (Bitmap icon = _backingImage.GetThumbnailImage(width, height, () => false, System.IntPtr.Zero) as Bitmap)
    using(MemoryStream imgStream = new MemoryStream())
    
        icon.Save(imgStream, System.Drawing.Imaging.ImageFormat.Icon);
        return new Icon(imgStream);
    

但是当程序调用该方法时,它会抛出一个ArgumentNullException("encoder") 我正在调用icon.Save

我觉得这很奇怪,因为我没有传递编码器,我希望框架弄清楚编码器应该是什么,这就是我传递ImageFormat 的原因。

ImageFormat.Icon 没有任何编码器,还是我做错了什么?

【问题讨论】:

@abatishchev:British spell programme 就是这样:p 【参考方案1】:

您猜对了:GDI+ only supports 和 ICON 解码器

您可能希望自己执行转换。在这种情况下,请参阅http://www.codeproject.com/KB/GDI-plus/safeicon.aspx。

【讨论】:

【参考方案2】:

只需将图像转换为图标:

Icon myIcon = Icon.FromHandle(((Bitmap)myImage).GetHicon())

然后使用流保存它:

myIcon.Save(myStream);

问候, 凯特

【讨论】:

谢谢,SmartK8。我知道这一点,但它在部分信任场景中不起作用。

以上是关于为啥 Image.Save(Stream, ImageFormat) 会抛出异常?的主要内容,如果未能解决你的问题,请参考以下文章

GDI+中发生一般性错误的解决办法

请问Python中的image.save命令怎么使用?会有啥效果

Image.Save()发生“GDI+ 中发生一般性错误”

使用 Image.Save() 时出现 C# Generic GDI+ 错误

将 GD-Sharp 流转换为位图

为啥 map.values().stream() 比 Array.stream(array) 慢得多