解决方案 »

  1.   

    换种方式不行么
    System.Drawing.Image img;
    img = System.Drawing.Image.FromFile(sourceModel.FilePath[i]);
    Bitmap bmp = new Bitmap(img);
      

  2.   


    不行, 这样写 会在img = System.Drawing.Image.FromFile(sourceModel.FilePath[i]); 这一行就报错了。 错误是一样的。
      这个问题已经困扰好多年了。 这次发生的是新图片在win7和server2008 上出现这种错误,但老的图片在这两种系统上却没有, 关键新的图片在server2003上是好的。 所以我现在只能怀疑 可能是win7或2008系统 又或者是新图片的编码有问题, 但由于技术能力有限 一直验证不出来。
      

  3.   

    Image用完再干掉
    img.Dispose()
      

  4.   


    不行, 这样写 会在img = System.Drawing.Image.FromFile(sourceModel.FilePath[i]); 这一行就报错了。 错误是一样的。
      这个问题已经困扰好多年了。 这次发生的是新图片在win7和server2008 上出现这种错误,但老的图片在这两种系统上却没有, 关键新的图片在server2003上是好的。 所以我现在只能怀疑 可能是win7或2008系统 又或者是新图片的编码有问题, 但由于技术能力有限 一直验证不出来。还会这样
      

  5.   


    这个知道的, 关键是 执行img = System.Drawing.Image.FromFile(sourceModel.FilePath[i]); 这行的时候就已经有异常了, 你看下我截的图 就知道了
      

  6.   


    你吧你的邮箱给我吧。 我吧工程和图片给你  随便传个网盘吧,其他人也可以帮你解决。
    http://pan.baidu.com/s/1i3j6YS9  就这个图片 代码我就不贴了。,, 反正在 Image.FromFile 或  Bitmap初始化的时候 就出现了GDI+中发生一般性错误。    目前测试在win2003 下可以正常运行, win7和2008 不行
      

  7.   

    gdi+应该是认为这个图片是有问题的。我这里可以打开,但是如果打开后直接再保存成jpg格式就会出那个一般性错误。而如果稍作处理,比如lock再unlock,或者用graphics画一下,再保存就没有错误了。分析了下,这个jpg里面有两个自定义tag,b000和b001里面有道路的名称、车牌号、车的颜色和“电子警察原始数据”等信息。原始文件把他们写到了exif ifd里,而我稍作处理再保存的jpg是把它们写到了ifd0里。我猜是因为这个区别导致了gdi+出错。也有人是有些图片win8打不开了,win7和之前的还好着,和你这个有点类似。微软对于gdi+有不少补丁,有些是打了补丁之后出的问题,然后再有些补丁又修复了。简单点的方案就是安装所有系统更新试试,如果不行看下c:\windows\system32\WindowsCodecs.dll 这个文件的版本信息,然后搜下有没有hotfix。另外,你的代码里面打开了文件,读到buffer里面,再把fs流传递给gdi+这不是正常的做法。虽然gdi+无视了这个fs的position,照样还能从头读文件,但是最好别这么写。
      

  8.   


    我这里什么都不处理,直接保存都是正常的。我更新服务都是关的,从来不打补丁。
    感谢提醒, 昨天我已经把这个问题解决了 我用了emgucv    这东西还是比较好使的, 虽说一开始使用需要点时间, 稍后我会把我找到的示例代码和相关文件放到云盘里, 供大家使用, 再次谢谢你们!
      

  9.   

    Read以后,把流的当前位置重置到流的最前面。fs.Position = 0
      

  10.   

    http://pan.baidu.com/s/1AjIyi
    这里是解决GDI+ 报错的资料, 是EmguCv完成的。 希望对遇到类似的问题的同学有帮助。