代码改变世界

C# 图片处理 代码 GDI+一般性错误 参数无效

2011-06-15 17:16  kwjlk  阅读(3479)  评论(0编辑  收藏  举报

在C#中使用Graphic 编程,应该说是C#编程进入了一个较高的层次,并且这里面会有许多令人惊心动魄的内容。无论是所实现的绚丽效果或者是遇到的程序异常,所付出的都是杀死一堆脑细胞是的绝对代价。看到成果自然可喜可贺,如若遇到程序异常唯有稳住心神、尽可能的找出解决办法才是正道。

其一、 GDI+ 中发生一般性错误。

  这个或许遇到的可能性很大,我已经在到现在为止的编程经历中两次遇到这个类型的错误。第一次被折磨的不轻,主要是情绪极为激动。第二次,算是冷静地解决问题。

我所遇到的这个问题主要是因为将Bitmap关联的资源释放后再次使用Bitmap对象。在下图中的代码中,我先从文件流中创建了一个Bitmap对象,然后关闭了该文件流。在接下来调用Bitmap对象的Save方法时产生了这个错误。

  所以这个问题发生后,可以先考虑自己是不是关闭或者释放了和Bitmap相关的资源所导致的。

其二、参数无效。

  这个问题一般会让人联系到Graphics.DrawImage是不是除了问题,而且网上相关资源也是主要集中在DrawImage上。在我下面的代码中,是因为在调用Graphics.DrawImage之前手动释放了Bitmap的资源(通过调用Bitmap.Dispose方法)。

总结:在如上两类错误中,分别是过早或者不正确的调用了图像对象所关联资源的释放或关闭方法、图像本身的资源释放方法。但是,从第二个图中我们可以看出,过早释放关联资源和图像本身后在调试状态查看图像对象的内部结构时明显不一样。