- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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
文档评论(0)