在处理图片时,读取本地图像文件,进行另存时发生GDI+中发生一般性错误 。

具体情况如下:

用OpenFileDialog打开图像文件,文件名为filename
StreamReader sr = new StreamReader(filename);
Stream sm = sr.BaseStream;
imgZheng = Image.FromStream(sm); sm.Close();
sr.Close(); //将读取到的Image重新写入流,转化为byte[]以便进行进一步的处理
MemoryStream mmstream = new MemoryStream();
imgZheng.Save(mmstream, ImageFormat.Png);//执行到此处时会出现“GDI+中发生一般性错误”这个错误。
byte[] imgByte = null;
imgByte = mstream.ToArray();

原因:在Image.Save时也会发生这种错误,sm.Close(); sr.Close();引起。注销掉就可以正常运行,但是文件被锁定。不注销掉关闭流,再Save()将引起该错误。

解决方法如下:

byte[] ImgByte = null;
MemoryStream mStream = new MemoryStream();
Bitmap bmp = new Bitmap(filename);
bmp.Save(mStream, ImageFormat.Png);
ImgByte = mStream.ToArray();
bmp.Dispose();
mStream.Close(); MemoryStream mstream = new MemoryStream(ImgByte);
imgZheng = Image.FromStream(mstream);
mstream.Close();

//此时再执行Save方法,将不会报错
          MemoryStream mstream = new MemoryStream();
                imgZheng.Save(mstream, ImageFormat.Png);

方法二:

            StreamReader sr = new StreamReader(filename);
Stream sm = sr.BaseStream;
Image img = Image.FromStream(sm);
img = Image.FromStream(sm);

           //将图像序列化给指定的流,再将流序列化为二进制数组。
BinaryFormatter binaryFormatter = new BinaryFormatter();
MemoryStream mstream = new MemoryStream();
binaryFormatter.Serialize(mstream, img);
byte[] ImgByte = mstream.ToArray();
mstream.Close();
sm.Close();
sr.Close();
           //将二进制数组放到流中,再反序列为图像
MemoryStream memostream = new MemoryStream(ImgByte);
imgZheng = (Image)binaryFormatter.Deserialize(memostream);
memostream.Close();

//此时再执行Save方法,将不会报错
          MemoryStream mstream = new MemoryStream();
                imgZheng.Save(mstream, ImageFormat.Png);
 

方法三:(与方法二相比,流的赋值方式不一样,流转换为图像的方式也不一样)

StreamReader sr = new StreamReader(filename);
Stream sm = sr.BaseStream;
Image img = Image.FromStream(sm);
img = Image.FromStream(sm); MemoryStream mstream = new MemoryStream();
img.Save(mstream, ImageFormat.Png);
byte[] ImgByte = mstream.ToArray();
mstream.Close();
sm.Close();
sr.Close(); MemoryStream mmstream = new MemoryStream(ImgByte);
imgZheng = Image.FromStream(mmstream);
mmstream.Close();
//此时再执行Save方法,将不会报错
          MemoryStream mstream = new MemoryStream();
                imgZheng.Save(mstream, ImageFormat.Png);

GDI+中发生一般性错误 Winform Image.Save(mstream, ImageFormat.Png)引发的更多相关文章

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

    从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生“GDI+ 中发生一般性错误”.public static System.Drawin ...

  2. gdi+ 中发生一般性错误 wpf解决方法

    错误背景:原来在winform程序中写了一个窗口,在wpf应用程序中调用显示了这个窗口,有个头像功能,加载本地的一个图片文件,加载前进行了各种逻辑判断,效果如下: 而加载的关键代码如下面: pictu ...

  3. GDI+中发生一般性错误的解决办法(转帖)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...

  4. GDI+ 中发生一般性错误。

    GDI+ 中发生一般性错误. “/wechat”应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及 ...

  5. [转载]GDI+中发生一般性错误

    注:第一次写博客,把自己遇到的问题和收集的资料记录在博客上.在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三 ...

  6. GDI+中发生一般性错误(转载)

    在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三种原因:1. 相应的帐户没有写权限.解决方法:赋予 NETW ...

  7. 【转】GDI+中发生一般性错误的解决办法

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常. 于是开始 ...

  8. GDI+中发生一般性错误的解决办法(转)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...

  9. C# .NET开发图形图像程序时提示"GDI+ 中发生一般性错误"

    今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html).顿时感觉好 ...

随机推荐

  1. Linux 上如何清除 RAM 内存高速缓存,缓存和交换空间

    像任何其他的操作系统一样,GNU / Linux已经有效地实施了内存管理甚至更多.但是,如果有任何进程正在蚕食你的内存,你要清除它,Linux提供了一个方法来刷新或清除RAM缓存. 在Linux中如何 ...

  2. 【对不起】我并不是真的会用spring

    19年12月4日,为了测试另外一个部门的服务在注册到这边zk后能否拿到dubbo代理,在controller草草写了一个http服务请求之,发现所有的dubbo接口都没有被注入代理,排查许久之后,发现 ...

  3. 第3.11节 Python强大的字符串格式化新功能:format字符串格式化的格式控制

                                                第3.11节 format字符串格式化的格式控制 一.    引言 上节介绍了四种format进行字符串格式化的 ...

  4. pycharm执行报错: unprintable file name [Errno 2] No such file

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 老猿在pycharm执行一个工程文件testListView时,发现其工程文件对应的py文件没有后缀 ...

  5. Android使用阿里镜像

    在学习room时项目一直在编译中,最后排查发现是依赖没有下载完导致.随后查询将依赖下载源改为阿里源,即可正常使用. 需要修改 build.gradle (project),改为以下内容: // Top ...

  6. 跨国合作:Serverless Components 在腾讯云的落地和实践

    导语 | Serverless Components 是 Serverless Framework 推出的最新解决⽅案,具有基础设施编排能⼒,开发者通过使⽤ Serverless Components ...

  7. MySQL必知必会详细总结

    一.检索数据 1.检索单个列:SELECT prod_name FROM products; 2.检索多个列:SELECT prod_id,prod_name,prod_price FROM prod ...

  8. 洛谷P2423 [HEOI2012]朋友圈

    题目大意: 有\(A,B\)两个点集,每个点有点权,在\(A\)集合中,两个点之间有边满足\(a_i\ xor\ a_j\ mod\ 2 = 1\),在\(B\)集合中,两个点之间有边满足\(b_i\ ...

  9. 查看java程序中对象占用空间大小

    需要引入的jar包: <dependency> <groupId>com.carrotsearch</groupId> <artifactId>java ...

  10. Mycat配置分库分表(垂直分库、水平分表)、全局序列

    1. Mycat相关文章   Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置   Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)   Docke ...