首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GDI+在System.Drawing.Image.Save上发生了一个泛型错误

GDI+在System.Drawing.Image.Save上发生了一个泛型错误
EN

Stack Overflow用户
提问于 2014-03-28 08:59:19
回答 7查看 84.3K关注 0票数 30

异常:

-- GDI+中发生了一个泛型错误。在System.Drawing.Image.Save(字符串文件名,ImageCodecInfo编码器,EncoderParameters encoderParams)在System.Drawing.Image.Save(String文件名,ImageFormat格式)在System.Drawing.Image.Save(String filename)

代码:

代码语言:javascript
运行
复制
byte[] bitmapData = new byte[imageText.Length];
MemoryStream streamBitmap;
bitmapData = Convert.FromBase64String(imageText);
streamBitmap = new MemoryStream(bitmapData);
System.Drawing.Image img = Image.FromStream(streamBitmap);
img.Save(path);

我们将base64字符串转换为MemoryStream,然后创建System.Drawing.Image (Image.FromStream(streamBitmap))。最后,图像保存在一个临时文件中。

奇怪的是,这个问题似乎发生在web服务器上的活动(并发用户的数量)很高时,并且在IISRESET或应用程序池循环之后暂时解决了这个问题……

==>垃圾收集器问题?

我已经查过临时文件夹的权限了..。

EN

回答 7

Stack Overflow用户

发布于 2014-03-28 09:26:42

当您从流加载图像时,您必须在图像的生存期内保持流处于打开状态,请参见此MSDN Image.FromStream

我认为导致异常的原因是内存流甚至在图像被处理之前就关闭了。您可以这样修改代码:

代码语言:javascript
运行
复制
byte[] bitmapData = new byte[imageText.Length];
bitmapData = Convert.FromBase64String(imageText);

  using (var streamBitmap = new MemoryStream(bitmapData))
  {
      using (img = Image.FromStream(streamBitmap))
      { 
         img.Save(path);
      }
  }

下面是一些与讨论类似问题的线程的链接:

gdi+错误保存网页图像

当绘制图像: System.Runtime.InteropServices.ExternalException:时,GDI中发生了一个泛型错误

票数 31
EN

Stack Overflow用户

发布于 2015-08-06 18:26:59

确保您指定的路径是有效的。使用前面的答案(在内存流上使用),如果文件路径不存在,您可能仍然会得到这个确切的错误“GDI+中的泛型错误”。文件将被创建,目录路径必须存在。

票数 17
EN

Stack Overflow用户

发布于 2015-05-12 10:02:20

在保存图像时,我遇到了相同的异常消息。结果证明我的代码很好,可以做它应该做的事情。

问题是硬盘已经满了,因此无法创建新的映像。我只在试图保存我正在处理的项目时才注意到这一点,因为它没有空间可以保存。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22708150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档