代码改变世界

图像处理

2010-07-16 15:33  张抗  阅读(2557)  评论(11)    收藏  举报

 

      最近自己在做图像处理方面的项目,介绍下用到的图像操作类和打开、保存、撤销等操作

      C#图像处理基础

      Bitmap类、bitmapData类和Graphics类是C#图像处理中最重要的3个类。

      1.Bitmap类

      Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成,因此Bitmap是用于处理由像素数据定义的图像的对象。该类的主要方法和属性如下:

      GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色。

      PixelFormat属性:返回图像的像素格式。

      Palette属性:获取或设置图像所使用的颜色调色板。

      Height属性和Width属性:返回图像的高度和宽度。

      LockBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素。在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式。

      LockBits方法的定义如下:

      public BitmapData LockBits(Rectangle rect,ImageLockMode flags,PixelFormat format);

      LockBits 方法使用3个类型,分别为Rectangle、ImageLockMode 枚举和PixelFormat枚举的参数,并返回一个类型为BitmapData的对象。

     

      2.BitmapData类

      Height属性:被锁定位图的高度。

      width属性:被锁定位图的宽度。
      PixelFormat属性:数据的实际像素格式。

      Scan()属性:被锁定数组的首字节地址,如果整个图像被锁定,则是图像的第一个字节地址。

      3.Graphics类

      Graphics对象是GDI+的关键所在。许多对象都是由Graphics类表示的,该类定义了绘制和填充图形对象的方法和属性。

 

 

      博客园关于“打开文件”和“保存文件”的博文蛮多的

      在这里推荐下:http://www.cnblogs.com/bear-study-hard/archive/2006/03/09/346154.html

     

      撤销:实现起来麻烦.包括需要保存动作,在还原动作,讲下抽象的实现过程

      首先定义一个Stack<Image> 集合

      private Stack<Image> history, now; //撤销、重复

      其次对图片进行操作的时候使用Stack<Image>的Push(参数一)方法保存处理后的图片//参数一为Iamge类型图片

      最后在撤销按钮中使用Stack<Image>的Pop()方法还原图片返回给Image对象显示在PictureBox里面