GDI+中发生一般性错误 Winform Image.Save(mstream, ImageFormat.Png)引发
在处理图片时,读取本地图像文件,进行另存时发生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)引发的更多相关文章
- Image.Save()发生“GDI+ 中发生一般性错误”
从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生“GDI+ 中发生一般性错误”.public static System.Drawin ...
- gdi+ 中发生一般性错误 wpf解决方法
错误背景:原来在winform程序中写了一个窗口,在wpf应用程序中调用显示了这个窗口,有个头像功能,加载本地的一个图片文件,加载前进行了各种逻辑判断,效果如下: 而加载的关键代码如下面: pictu ...
- GDI+中发生一般性错误的解决办法(转帖)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...
- GDI+ 中发生一般性错误。
GDI+ 中发生一般性错误. “/wechat”应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及 ...
- [转载]GDI+中发生一般性错误
注:第一次写博客,把自己遇到的问题和收集的资料记录在博客上.在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三 ...
- GDI+中发生一般性错误(转载)
在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三种原因:1. 相应的帐户没有写权限.解决方法:赋予 NETW ...
- 【转】GDI+中发生一般性错误的解决办法
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常. 于是开始 ...
- GDI+中发生一般性错误的解决办法(转)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...
- C# .NET开发图形图像程序时提示"GDI+ 中发生一般性错误"
今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html).顿时感觉好 ...
随机推荐
- C语言讲义——结构体struct
结构体是一种变量类型,可以包含多个变量(变量类型不必相同). 结构体的关键字是struct也是一种值类型. 例:设计一个表示"书本"的结构体: structBook { chari ...
- Java基础教程——异常处理详解
异常处理 好程序的特性 可重用性 可维护性 可扩展性 鲁棒性 |--|--Robust的音译 |--|--健壮.强壮之意 |--|--指在异常和危险情况下系统依然能运行,不崩溃 Java中,写下如下代 ...
- 小知识点 之 JVM -XX:MaxGCPauseMillis 与 -XX:GCTimeRatio
写在前边 JVM调优更多是针对不同应用类型及目标进行的调整,往往有很大的实验成份,通过实验来针对当前应用设置相对合适的参数,提高应用程序的性能与稳定性 最近在复习JVM,Parallel Scaven ...
- wsgi_uwsgi_nginx
1.一些重要概念 https://www.cnblogs.com/xiaonq/p/8932266.html 1.1 web容器 什么是web容器 1.web容器是帮助我们部署java.php.pyt ...
- Java lambda 分组后多列求和
主要思路是reducing,可以像sql一样分组后多列求和处理成新对象等: select code,max(name)as name,sum(chengJi)as chengJi,sum(age)as ...
- 音视频入门-18-手动生成一张GIF图片
* 音视频入门文章目录 * GIF 编码知识 GIF 包含的数据块: 文件头(Header) 逻辑屏幕标识符(Logical Screen Descriptor) 全局颜色表(Global Color ...
- ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据
ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...
- espcms代码审计第一弹
以前的代码审计都是在CTF比赛题里面进行对于某一段代码的审计,对于后端php整体代码和后端整体架构了解的却很少,所以有空我都会学习php的代码审计,以提高自己 环境就直接用的是phpstudy,学习的 ...
- LeetCode初级算法之数组:136 只出现一次的元素
只出现一次的元素 题目地址:https://leetcode-cn.com/problems/single-number/ 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找 ...
- 团队作业part5--测试与发布(Alpha版本)
测试报告 1.测试与解决bug 1)测试人员测试出的bug 游戏失败后方块还能下落 分数设计不太合理 存在行数不可消除的情况 2)开发人员解决bug 2.场景测试 适用群体:打发时间的学生.工作压力大 ...