项目中前一次遇到字节数组转化为图片时偶尔出现“GDI+中发生一般性错误”,这回是图片转化为字节数组时出现这种情况。经研究解决办法如下:
原代码(出错代码)如下:
方法一:
方法二:
两种方法实际上都是新建了一个与原图一模一样的副本,在木子的技术空间(
http://www.cnblogs.com/szulm/articles/1227060.html)找到这么一句话“Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。”个人认为发生GDI+一般性错误的原因是对象引用与对象的生存期的问题。
原代码(出错代码)如下:
- public static byte[] imageToByteArray(Image imageIn)
- {
- using (MemoryStream ms = new MemoryStream())
- {
- if (imageIn != null)
- {
- imageIn.Save(ms,ImageFormat.Jpeg);
- }
- return ms.ToArray();
- }
- }
方法一:
- public static byte[] imageToByteArray(Image imageIn)
- {
- using (MemoryStream ms = new MemoryStream())
- {
- if (imageIn != null)
- {
- Bitmap t=new Bitmap (imageIn);
- t.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- return ms.ToArray();
- }
- }
- public static byte[] imageToByteArray(Image imageIn)
- {
- using (MemoryStream ms = new MemoryStream())
- {
- if (imageIn != null)
- {
- Bitmap pic = new Bitmap(imageIn.Width, imageIn.Height);
- Graphics g = Graphics.FromImage(pic);
- g.DrawImage(imageIn, 0, 0, imageIn.Width, imageIn.Height);
- g.Dispose();
- pic.Save(ms, ImageFormat.Jpeg);
- pic.Dispose();
- }
- return ms.ToArray();
- }
- }