ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:24.32KB ,
资源ID:6142700      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6142700.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C GDI 编程教程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C GDI 编程教程.docx

1、C GDI 编程教程C#图形图像编程基础本次课程主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础、C#图像处理基础以及简单的图像处理技术。1 GDI+绘图基础编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形,在C#中,进行图形程序编写时用到的是GDI+(Graphice Device Interface Plus图形设备接口)版本,GDI+是GDI的进一步扩展,它使我

2、们编程更加方便。 GDI+概述GDI+是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的“托管类接口”,GDI+主要提供了以下三类服务:(1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。(2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。(3) 文字显示:GDI+支持使用各种字体、字号和样式

3、来显示文本。我们要进行图形编程,就必须先讲解Graphics类,同时我们还必须掌握Pen、Brush和Rectangle这几种类。GDI+比GDI优越主要表现在两个方面:第(一)GDI+通过提供新功能(例如:渐变画笔和alpha混合)扩展了GDI的功能;第(二)修订了编程模型,使图形编程更加简易灵活。 Graphics类Graphics类封装一个GDI+绘图图面,提供将对象绘制到显示设备的方法,Graphics与特定的设备上下文关联。画图方法都被包括在Graphics类中,在画任何对象(例如:Circle,Rectangle)时,我们首先要创建一个Graphics类实例,这个实例相当于建立了一

4、块画布,有了画布才可以用各种画图方法进行绘图。绘图程序的设计过程一般分为两个步骤:(一)创建Graphics对象;(二)使用Graphics对象的方法绘图、显示文本或处理图像。通常我们使用下述三种方法来创建一个Graphics对象。方法一、利用控件或窗体的Paint事件中的PainEventArgs在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。例如:ET中,GDI+的所有绘图功能都包括在System、2引用命名空间在C

5、#应用程序中使用using命令已用给定的命名空间或类,下面是一个C#应用程序引用命名空间的例子:using System;using ;using ;using ; 常用画图对象在创建了Graphics对象后,就可以用它开始绘图了,可以画线、填充图形、显示文本等等,其中主要用到的对象还有: Pen:用来用patterns、colors或者bitmaps进行填充。 Color:用来画线和多边形,包括矩形、圆和饼形。 Font:用来给文字设置字体格式。 Brush:用来描述颜色。 Rectangle:矩形结构通常用来在窗体上画矩形。 Point:描述一对有序的x,y两个坐标值。1Pen类Pen用来

6、绘制指定宽度和样式的直线。使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理。使用画笔时,需要先实例化一个画笔对象,主要有以下几种方法。用指定的颜色实例化一只画笔的方法如下:public Pen(Color);用指定的画刷实例化一只画笔的方法如下:public Pen(Brush);用指定的画刷和宽度实例化一只画笔的方法如下:public Pen(Brush, float);用指定的颜色和宽度实例化一只画笔的方法如下:public Pen(Color, float);实例化画笔的语句格式如下:Pen pn

7、=new Pen;或者Pen pn=new Pen,100);Pen常用的属性有以下几个,如表所示:表 Pen常用属性名称说明Alignment获得或者设置画笔的对齐方式。Brush获得或者设置画笔的属性。Color获得或者设置画笔的颜色。Width获得或者设置画笔的宽度。2Color结构在自然界中,颜色大都由透明度(A)和三基色(R,G,B)所组成。在GDI+中,通过Color结构封装对颜色的定义,Color结构中,除了提供(A,R,G,B)以外,还提供许多系统定义的颜色,如Pink(粉颜色),另外,还提供许多静态成员,用于对颜色进行操作。Color结构的基本属性如表所示。表 颜色的基本属性

8、名称说明A获取此Color结构的alpha分量值,取值(0255)。B获取此Color结构的蓝色分量值,取值(0255)。G获取此Color结构的绿色分量值,取值(0255)。R获取此Color结构的红色分量值,取值(0255)。Name获取此Color结构的名称,这将返回用户定义的颜色的名称或已知颜色的名称(如果该颜色是从某个名称创建的),对于自定义的颜色,将返回RGB值。Color结构的基本(静态)方法如表所示表 颜色的基本方法名称说明FromArgb从四个8位ARGB分量(alpha、红色、绿色和蓝色)值创建Color结构。FromKnowColor从指定的预定义颜色创建一个Color结

9、构。FromName从预定义颜色的指定名称创建一个Color结构。Color结构变量可以通过已有颜色构造,也可以通过RGB建立,例如:Color clr1 = (122,25,255);Color clr2 = ;Top矩形顶端坐标Width矩形宽X矩形左上角顶点X坐标Y矩形左上角顶点Y坐标Retangle结构的构造函数有以下两个:.】将弹出一个“打开”对话框,如图13所示。图12 Image属性图13“打开”对话框 (3)选择图像文件后,单击【打开】按钮。 方法(二)、使用“打开文件”对话框输入图像在窗体上添加一个命令按钮(button1)和一个图形框对象(pictureBox1),双击命令

10、按钮,在响应方法中输入如下代码: private void button1_Click(object sender, EventArgs e) OpenFileDialog ofdlg = new OpenFileDialog(); = BMP File(*.bmp)|*.bmp; if () = Bitmap image = new Bitmap; = image; 执行该程序时,使用“打开文件”对话框,选择图像文件,该图像将会被打开,并显示在pictureBox1图像框中。【例7】图像输入。采用方法(二)来实现图像的输入。 设计步骤如下: (1)建立如图14所示的项目界面,在窗体上加入【打

11、开图像】命令按钮和一个PictureBox控件。 (2)双击【打开图像】命令按钮,编辑按钮的单击事件响应函数,其代码同方法(二)中所写代码,在此不再重复。图14 图像输入 (3)运行后单击【打开图像】按钮,弹出一个“打开文件”对话框,选择图象文件名,运行结果如图15所示。图15 运行结果2图像的保存 保存图像的步骤如下: (1)当使用按钮和保存对话框保存文件时,加入保存按钮和PictureBox控件,窗体设计如图16所示。(2)保存命令钮的单击事件的响应函数代码如下:private void button2_Click(object sender, EventArgs e) string st

12、r; Bitmap box1 = new Bitmap; SaveFileDialog sfdlg = new SaveFileDialog(); = bmp文件(*.BMP)|*.BMP|All File(*.*)|*.*; (); str = ; (str); 执行该过程时,将打开“另存为”对话框,如图17所示。图16 保存图像图17 “另存为”对话框选择图像文件的保存路径。3图像格式的转换使用Bitmap对象的Save方法,可以把打开的图像保存为不同的文件格式,从而实现图像格式的转换。在上述例子中添加一个命令按钮,双击该命令按钮,编辑其相应代码如下:private void button

13、3_Click(object sender, EventArgs e)string str; Bitmap box1 = new Bitmap; SaveFileDialog sfdlg = new SaveFileDialog(); = bmp文件(*.jpeg)|*.jpeg|All File(*.*)|*.*; (); str = ;Bitmap对象的Save方法中的第二个参数指定了图像保存的格式。支持的格式如表9所示:表9 支持的格式名称说明 Bmp获取位图图像格式(BMP)。Emf获取增强型Windows图元文件图像格式(EMF)。Exif获取可交换图像文件(Exif)格式。 Gif

14、获取图形交换格式(GIF)图像格式。 Guid获取表示此ImageForma 对象的Guid结构。Icon获取Windows图标图像格式。Jpeg获取联合图像专家组(JPEG)图像格式。MemoryBmp获取内存位图图像格式。Png获取W3C可移植网络图形(PNG)图像格式。Tiff获取标签图像文件格式(TIFF)图像格式。Wmf获取Windows图元文件(WMF)图像格式。 图像的拷贝和粘贴图像拷贝和粘贴是图像处理的基本操作之一,通常有两种方法来完成图像的拷贝和粘贴:一种可以使用剪贴板拷贝和粘贴图像,一种使用AxPictureClip控件拷贝和粘贴图像。1使用剪贴板拷贝和粘贴图像剪贴板是在W

15、indwos系统中单独预留出来的一块内存,它用来暂时存放在Windwos应用程序间要交换的数据,使用剪贴板对象可以轻松实现应用程序间的数据交换,这些数据包括图像或文本。在C#中,剪贴板通过Clipboard类来实现,Clipboard类的常用方法如表10所示。表10 Clipboard类常用方法名称说明Clear从剪贴板中移除所有数据。ContainsData指示剪贴板中是否存在指定格式的数据,或可转换成此格式的数据。ContainsImage指示剪贴板中是否存在 Bitmap 格式或可转换成此格式的数据。ContainsText已重载。指示剪贴板中是否存在文本数据。GetData从剪贴板中检

16、索指定格式的数据。GetDataObject检索当前位于系统剪贴板中的数据。GetFileDropList从剪贴板中检索文件名的集合。GetImage检索剪贴板上的图像。GetText已重载。从剪贴板中检索文本数据。SetAudio已重载。将WaveAudio格式的数据添加到剪贴板中。SetData将指定格式的数据添加到剪贴板中。SetDataObject已重载。将数据置于系统剪贴板中。SetImage将Bitmap格式的Image添加到剪贴板中。SetText已重载。将文本数据添加到剪贴板中。剪贴板的使用主要有一下两个步骤: 将数据置于剪贴板中。 从剪贴板中检索数据。下面简要介绍剪贴板的使用

17、。(1)将数据置于剪贴板中可以通过SetDataObject方法将数据置于剪贴板中,SetDataObject方法有以下三种形式的定义: (Object):将非持久性数据置于系统剪贴板中。由.NET Compact Framework支持。 (Object,Boolean):将数据置于系统剪贴板中,并指定在退出应用程序后是否将数据保留在剪贴板中。 (Object,Boolean,Int32,Int32):尝试指定的次数,以将数据置于系统剪贴板中,且两次尝试之间具有指定的延迟,可以选择在退出应用程序后将数据保留在剪贴板中。将字符串置于剪贴板中的语句如下所示:string str = Mahesh

18、 writing data to the Clipboard;(str)(2)从剪贴板中检索数据 可以通过GetDataObject方法从剪贴板中检索数据,它将返回IdataObject,其定义如下:public static IDataObject GetDataObject();首先使用IdataObject对象的GetDataPresent方法检测剪贴板上存放的是什么类型的数据,然后是使用IdataObject对象的GetData方法获取剪贴板上相应的数据类型的数据。下面使用GetDataObject方法从剪贴板中检索出字符串数据。例如:IDataObject iData = (); i

19、f ) string str =(String); 【例8】使用剪贴板拷贝和粘贴图像。(1)建立如图18所示的窗体。在窗体上天加两个图片框控件和两个命令按钮控件。利用第一个图片框的属性窗口为其输入图像。(2)双击【复制】命令按钮,输入如下代码,将图像置于剪贴板中。private void button1_Click(object sender, EventArgs e) ; (3)双击【粘贴】命令按钮,输入如下代码,从剪贴板中检索出图像,并显示于第二个图片框中。private void button2_Click(object sender, EventArgs e) IDataObject

20、iData = (); if ) = (Bitmap); (4)运行程序,首先单击【复制】命令按钮,然后单击【粘贴】命令按钮,运行结果如图19所示。图18 剪贴板窗体设计图19 剪贴板图像复制2使用AxPictureClip控件拷贝和粘贴图像AxPictureClip控件不是常规控件,而是一个ActiveX控件。因此,工具箱中没有该控件,要想使用该控件,必须把该控件添加到工具箱中,具体步骤如下:(1)右键单击工具箱的空白处,在弹出的快捷菜单中选择【选择项】菜单项,则弹出“选择工具箱项”对话框,如图20所示。图20 添加AxPictureClip控件(2)在该对话框中的【COM组件】选项卡中选择

21、【Microsoft Picture Clip Control,version6】项,并单击【确定】按钮,该控件就添加到工具箱中了。AxPictureClip控件可用于随机访问方法或者枚举访问方法指定源位图中剪切区域如下: 使用随机访问方法来作为剪切区域选择源位图的任何部分。通过使用ClipX和ClipY属性指定的剪切区域左上角,ClipHeight和ClipWidth属性确定剪切区域的区域。当想要查看位图的一部分此方法很有用。 使用枚举访问方法可以分成的行和列数指定源位图。结果是图片的统一矩阵单元编号0、1、2和等等,通过使用GraphicCell属性来访问单个单元。当源位图图像与要访问单独

22、的调色板包含这种方法非常有用。【例9】使用AxPictureClip控件剪切和粘贴图像。(1)建立如图21示的窗体。在窗体上天加两个图片框控件和两个命令按钮控件。(2)双击【打开】命令按钮,输入如下代码,将图像打开。 private void button1_Click(object sender, EventArgs e) OpenFileDialog ofdlg = new OpenFileDialog(); = BMP File(*.bmp)|*.bmp; if () = Bitmap image = new Bitmap; = image; (3)双击【复制与粘贴】命令按钮,输入如下代

23、码,将图像复制到第二个图片框中。 private void button2_Click(object sender, EventArgs e) /使用枚举访问方法 = ; = 6;/将图片分成6列 = 3;/将图片分成3行 try = (0);/取出第一个图像块 catch (Exception ex) (); (4)运行程序,单击【打开】命令按钮,选择一个图像文件打开,如图21所示,然后单击【复制与粘贴】命令按钮,运行结果如图22所示。图21 打开图片后效果(5)使用随机访问方法。也可以使用随机访问方法,只需将上述例子中的【复制与粘贴】命令按钮的响应方法改为如下代码即可: private v

24、oid button2_Click(object sender, EventArgs e) /使用随机访问方法 = ; = 15; = 15; = 50; = 50; = ;/ 图22 粘贴后效果注意:如果没有控件,需要自行下载或复制到本机,并通过注册程序REGSVR32注册该组件。例如,如果该文件在C:WINDOWSsystem32路径下,可以通过如下命令行语句实现注册:REGSVR32 C:WINDOWSsystem32 彩色图像处理1图像的分辨率所谓分辨率就是指画面的解析度,由多少像素构成,数值越大,图像也就越清晰。我们通常所看到的分辨率都以乘法形式表现的,例如800*600,其中“80

25、0”表示屏幕上水平方向显示的点数,“600”表示垂直方向的点数。图像分辨率越大,越能表现更丰富的细节。图像的分辨率决定了图像与原物的逼进程度,对同一大小的图像,其像素数越多,即将图像分割的越细,图像越清晰,称之为分辨率高,反之为分辨率低,分辨率的高低取决于采样操作。例如,对于一幅256*256分辨率的图像,采用变换的方法可以实现不同分辨率显示。【例10】将256*256分辨率的图像变换为64*64分辨率。 算法说明:将256*256分辨率的图像变换为64*64分辨率方法是将源图像分成4*4的子图像块,然后将该4*4子图像块的所有像素的颜色按F(i,j)的颜色值进行设定,达到降低分辨率的目的。建

26、立一个如图23所示界面的项目,【分辨率】命令按钮的响应方法的代码设计如下: private void button3_Click(object sender, EventArgs e) Color c = new Color(); /把图片框中的图片给一个Bitmap类型 Bitmap box1 = new Bitmap; Bitmap box2 = new Bitmap; int r, g, b, size, k1, k2, xres, yres, i, j; size = 4; for (i = 0; i = xres - 1; i += size) for (j = 0; j = yre

27、s - 1; j += size) c = (i, j); r = ; g = ; b = ; /用FromArgb把整型转换成颜色值 Color cc = (r, g, b); for (k1 = 0; k1 = size - 1; k1+) for (k2 = 0; k2 = size - 1; k2+) (i + k1, j + k2, cc); ();/刷新 = box2;/图片赋到图片框中 输入图像分辨率为256*256像素,转换为64*64分辨率图像如图23所示。图23 分辨率2彩色图像变换灰度图像(1)彩色位图图像的颜色 图像像素的颜色是由三种基本色颜色,即红(R)、绿(G)、蓝

28、(B)有机组合而成的,称为三基色。每种基色可取0255的值,因此由三基色可组合成(256*256*256)1677万种颜色,每种颜色都有其对应的R、G、B值。例如,常见的7种颜色及其对应的R、G、B值如表11所示。表11 常见的7种颜色及其对应的R、G、B值颜色名R值G值B值红25500蓝00255绿02550白255255255黄2552550黑000青0255255品红2550255 (2)彩色图像颜色值的获取在使用C#系统处理彩色图像时,使用Bitmap类的GetPixel方法获取图像上指定像素的颜色值,格式为: Color c = new Color(); c = (i,j); 其中,(i,j)为获得颜色的坐标位置。GetPixel方法取得指定位置的颜色值并返回一个长整型的整数。例如,求图片框1中图像在位置(i,j)的像素颜色值c时,可写为: Color c=new Color(); c = (i,j); (3)彩色位图颜色值分解 像素颜色值c是一个长整型的数值,占4个字节,最上位字节的值为“0”,其它3个下位字节依次为B、G、R,值为0255。 从从值分解出R、G、B值可直接使用: Color c =new Color(); c= (i,j);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1