项目中前一次遇到字节数组转化为图片时偶尔出现“GDI+中发生一般性错误”,这回是图片转化为字节数组时出现这种情况。经研究解决办法如下:
原代码(出错代码)如下:
-
publicstaticbyte[]imageToByteArray(ImageimageIn)
- {
-
using(MemoryStreamms=newMemoryStream())
- {
-
if(imageIn!=null)
- {
- imageIn.Save(ms,ImageFormat.Jpeg);
- }
-
returnms.ToArray();
- }
- }
方法一:
-
publicstaticbyte[]imageToByteArray(ImageimageIn)
- {
-
using(MemoryStreamms=newMemoryStream())
- {
-
if(imageIn!=null)
- {
-
Bitmapt=newBitmap(imageIn);
- t.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
- }
-
returnms.ToArray();
- }
- }
方法二:
-
publicstaticbyte[]imageToByteArray(ImageimageIn)
- {
-
using(MemoryStreamms=newMemoryStream())
- {
-
if(imageIn!=null)
- {
-
Bitmappic=newBitmap(imageIn.Width,imageIn.Height);
- Graphicsg=Graphics.FromImage(pic);
- g.DrawImage(imageIn,0,0,imageIn.Width,imageIn.Height);
- g.Dispose();
- pic.Save(ms,ImageFormat.Jpeg);
- pic.Dispose();
- }
-
returnms.ToArray();
- }
- }
两种方法实际上都是新建了一个与原图一模一样的副本,在木子的技术空间(
http://www.cnblogs.com/szulm/articles/1227060.html)找到这么一句话“Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。”个人认为发生GDI+一般性错误的原因是对象引用与对象的生存期的问题。
分享到:
相关推荐
GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误
导致图片文件被死锁无法释放资源,导置重写资源时出现一般性错误。 解决方法将代码改成以下代码 代码如下: Bitmap oImage = new Bitmap(ImageUrl);//从图片文件中读取图片流 Bitmap OldImage = new Bitmap...
C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战
GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,特别是初学者,强烈推荐下载. 对于初学者,还有一个问题就是,如果想要进行GDI+开发, 需要下载一个GDI+的开发包(SDK). 网上搜到的一般只包含一个...
本书是一本为.NET开发人员讲授如何编写Windows和Web图形应用程序的专著,书中全面介绍了GDI+和Windows图形程序设计的基本知识和GDI+图形程序设计的各个方面。 本书适合于开发GDI+图形应用程序的初、中级程序员...
GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明
GDI+开发包,解压文件,并将其中的Includes和Lib中的文件复制到VS安装目录中VC98目录下的Includes和Lib文件夹中
GDI++中文帮助中文的,GDI++使用指南中文的。方面使用.
GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考
1.4 .NET中的GDI+ 名称空间和类 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一个GDI+ 应用程序 2.4 一些基本的GDI+ 对象 总结 第3章 Graphics类 3.1 Graphics类的属性 3.2 ...
利用GDI+绘图,实现了图片动态改变位置及大小了功能,使用双缓存防止闪烁
GDI+LIB GDI+LIB GDI+LIB GDI+LIB
MFC GDI+缩放图片示例
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 或者 将Visual...
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 4. 程序中添加GDI+的...