`
gaofen100
  • 浏览: 1187486 次
文章分类
社区版块
存档分类
最新评论

GDI+中发生一般性错误之图片转化为字节数组

 
阅读更多
项目中前一次遇到字节数组转化为图片时偶尔出现“GDI+中发生一般性错误”,这回是图片转化为字节数组时出现这种情况。经研究解决办法如下:
原代码(出错代码)如下:

  1. publicstaticbyte[]imageToByteArray(ImageimageIn)
  2. {
  3. using(MemoryStreamms=newMemoryStream())
  4. {
  5. if(imageIn!=null)
  6. {
  7. imageIn.Save(ms,ImageFormat.Jpeg);
  8. }
  9. returnms.ToArray();
  10. }
  11. }


方法一:

  1. publicstaticbyte[]imageToByteArray(ImageimageIn)
  2. {
  3. using(MemoryStreamms=newMemoryStream())
  4. {
  5. if(imageIn!=null)
  6. {
  7. Bitmapt=newBitmap(imageIn);
  8. t.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
  9. }
  10. returnms.ToArray();
  11. }
  12. }
方法二:
  1. publicstaticbyte[]imageToByteArray(ImageimageIn)
  2. {
  3. using(MemoryStreamms=newMemoryStream())
  4. {
  5. if(imageIn!=null)
  6. {
  7. Bitmappic=newBitmap(imageIn.Width,imageIn.Height);
  8. Graphicsg=Graphics.FromImage(pic);
  9. g.DrawImage(imageIn,0,0,imageIn.Width,imageIn.Height);
  10. g.Dispose();
  11. pic.Save(ms,ImageFormat.Jpeg);
  12. pic.Dispose();
  13. }
  14. returnms.ToArray();
  15. }
  16. }
两种方法实际上都是新建了一个与原图一模一样的副本,在木子的技术空间(http://www.cnblogs.com/szulm/articles/1227060.html)找到这么一句话“Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。”个人认为发生GDI+一般性错误的原因是对象引用与对象的生存期的问题。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics