C语言Windows程序设计第11章 C数字图像处理基础程序设计.ppt
文本预览下载声明
2010.07 第11章 C#数字图像处理基础程序设计 学习要点 1.了解数字图像处理的基本原理及用途 2.了解图像处理中像素法、内存法及指针法的各自特点,并重点掌握指针法的图像处理编程 3.掌握数字图像基础处理的C#编程技术 11.1 C#与数字图像处理概述 在C#中是利用GDI+来实现对图形、图像的处理,GDI+是与.NET Framework中的图形设备接口进行交互的入口,它在GDI的基础上提供了明显的改进,特别是GDI+不再有句柄或上下文的概念,而是以Graphics对象取代之,所以,GDI+使得应用程序开发人员在输出屏幕或打印机信息时,无需考虑具体显示设备的细节,只需调用GDI+库输出的类的相应方法即可完成图形操作,从而使程序的编写更加容易。 以下将在上一章的GDI+图形图像处理基础上,结合10个典型示例进一步讲解C#图像处理的相关技术。 11.2 C#数字图像像素操作的三种方法 1.直接操作法 方法与过程 这种方法处理图像的基本过程如下: (1)直接使用GDI+中的Bitmap.GetPixel方法来读取当前像素的信息(颜色)。 (2)直接使用GDI+中的Bitmap.SetPixel方法来设置当前像素的信息(颜色)。 构造函数 这两个方法的构造函数如下: public Color GetPixel(int x,int y) 示例代码 //获取当前像素点的RGB颜色值 crtColor = crtBitmap.GetPixel(5,3); //设置当前像素点的新的RGB颜色值 crtBitmap.SetPixel(5,3,Color.FromArgb(crtColor.R, 0, 0)); 11.2 C#数字图像像素操作的三种方法 2.内存法 方法与过程 这种方法处理图像的基本过程如下: (1)在开始图像处理之前,先利用LockBits方法将Bitmap锁定到系统内存中。 (2)再利用Marshal.Copy方法将已锁定到系统内存中的图像数据复制到一个字节数组中。 (3)而后在该字节数组中对图像的像素点进行操作,即实施图像处理。 (4)再执行(3)的反过程,即利用Marshal.Copy方法字节数组中将图像数据复制到锁定的系统内存中。 (5)最后,利用UnlockBits方法解除被锁存的处理图像数据,图像处理结束。 由于这种方法的全部操作都在内存中进行,所以可使程序的运行速度得以很多的提高。 11.2 C#数字图像像素操作的三种方法 2.内存法 示例代码 例如,仅保留一幅图像中的红色信息的图像处理,其C#内存法的示例代码如下: //获取被处理图像的大小 Rectangle rect = new Rectangle(0, 0, crtBitmap.Width, crtBitmap.Height); //将被处理图像数据锁存 System.Drawing.Imaging.BitmapData bmpData = crtBitmap.LockBits(rect, System. Drawing.Imaging.ImageLockMode.ReadWrite, crtBitmap.PixelFormat); //获取第一个像素的地址 IntPtr ptr = bmpData.Scan0; //计算该被处理的24位位图的字节总数 int bytes = crtBitmap.Width * crtBitmap.Height * 3; //根据以上字节总数创建用于保存图像数据的字节数组 byte[] rgbValues = new byte[bytes]; 11.2 C#数字图像像素操作的三种方法 3.指针法 方法与过程 该方法与内存法相似,其处理图像的基本过程如下: (1)在开始图像处理之前,先利用LockBits方法将Bitmap锁定到系统内存中。 (2)然后直接利用指针对图像的像素点进行操作,即实施图像处理。 (3)最后,利用UnlockBits方法解除被锁存的处理图像数据,图像处理结束。 为了便于读者连接C#中利用指针对BitmapData对象的像素进行操作的基本过程,以下给出24位的BitmapData对象的像素描述示意图,如图所示。 11.2 C#数字图像像素操作的三种方法 3.指针法 11.2 C#数字图像像素操作的三种方法 3.指针法 示例代码 仅保留一幅图像中的红色信息的图像处理,其C#指针法的示例代码如下: //获取被处理图像的大小 Rectangle rect = new Rectangle(0, 0, crtBitmap.Width, crtBitmap.Height); //将被处理图像数据锁存 System.Drawing.Imaging.BitmapData bm
显示全部