在处理图片时,读取本地图像文件,进行另存时发生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. 蓝桥杯——压缩变换(2016JavaB组第9题)

    压缩变换(16JavaB9) 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这 ...

  2. Kafka源码环境搭建

    github地址:https://github.com/apache/kafka clone下来之后可以看到这样的项目结构: 文件目录说明. 目录 描述 bin Windows 和 Linux 下 K ...

  3. python应用(5):变量类型与数据结构

    如前所说,写程序如同给算法写壳,而算法就是流程,所以流程是程序的主角(但这个流程不一定要你来设计).在程序中,为了配合流程(算法)的实现,除了顺序.分支与循环语句的使用,还要借助"变量&qu ...

  4. XOR性质

    异或XOR的性质: 1. 交换律 2. 结合律 3. x^x = 0 -> 偶数个异或为0 4. x^0 = x -> 奇数个异或为本身 5. 自反性:a^b^b = a^0 =a

  5. BootstrapBlazor 组件库介绍

    项目介绍 演示系统地址:https://www.blazor.zone Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富 ...

  6. 第三十五章、PyQt输入部件:QFontComboBox、QLineEdit、QTextEdit、QPlainText功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 输入部件量比较多,且功能很丰富,但除了用于编写编辑器.浏览器 ...

  7. 第13.1节 关于Python的异常处理

    Python的异常网上有很多资料介绍,老猿就不再细说,在这里老猿只挑几件老猿认为重要的内容介绍一下. 一. 异常处理完整语法 异常处理的完整语法语法如下: try: - except (异常1,-,异 ...

  8. 安装pyspider出现的问题

    本文来自微信公众号:coder_xiaobu,欢迎关注 一.安装pyspider pip install pyspider 二.启动 pyspider all 三.安装中出现的问题处理 安装的时候出现 ...

  9. bootstrap 扩展参数

    后台接受的参数形式 前端加载bootstrap时做的处理

  10. 通过CSS绘制五星红旗

    任务要求: 1.创建一个div作为红旗旗面,用CSS控制其比例宽高比为3:2,背景为红色. 2.再创建五个小的div,用CSS控制其大小和位置. 3.用CSS同时控制每个小div的大小.边框和位置,同 ...