资源描述
按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,*,按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,*,按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,第,6,章,GDI+,编程,6.1 GDI+,简介,6.2,绘图,6.3,颜色,6.4,文本输出,6.5,图像处理,第6章 GDI+编程6.1 GDI+简介6.2 绘图6,6.1 GDI+,简介,6.1.1,坐标系,绘图是在一个逻辑坐标系中进行的,它是一个相对的坐标系,比如,可以是窗体坐标系,也可以是某个对象坐标系(如文本框、按钮等对象),无论是基于哪一种对象,坐标系总是以该对象的左上角为原点(,0,0,)。除了原点外,坐标系还包括横坐标(,X,轴)和纵坐标(,Y,轴),,X,值是指点与原点的水平距离,,Y,值是指点与原点的垂直距离,如图,6.1,所示。,Y,X,(0,0),6.1 GDI+简介6.1.1 坐标系YX(0,0),6.1.2,像素,像素是光栅设备可以显示的最小单位。对单色设备来说,每个像素可以用一位(比特)表示,而对彩色设备,每个像素必须用多个位表示,位数越多,所表示的颜色越丰富,表6.1列出了部分设备中每个像素的位数及颜色数:,像素位数,颜色数,典型设备,1,2,单色显示器、打印机,2,16,标准,VGA,8,256,256色VGA,16,32768或65535,32K或64K色VGA,24,2,24,24位真彩色设备,32,2,32,32位真彩色设备,6.1.2 像素像素是光栅设备可以显示的最小单位。对单色设备,6.1.3 Graphics,类,1,Paint,事件,在为窗体编写,Paint,事件处理程序时,图形对象作为一个,PaintEventArgs,类的实例提供。下面的代码引用,Paint,事件的,PaintEventArgs,中的,Graphics,对象:,private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgs pe),/*,声明图形对象并把它设置为,PaintEventArgs,事件提供的图形对象,*,/,Graphics g=pe.Graphics;,2,CreateGraphics,方法,使用控件或窗体的,CreateGraphics(),方法获取对,Graphics,对象的引用,该对象表示这个控件或窗体的绘图表面。例如:,Graphics g;,g=this.CreateGraphics();/,把,g,设为一个图形对象,来表示控件或窗体的绘图平面,6.1.3 Graphics类1Paint事件,6.1.3 Graphics,类,3,Graphics.FromImage,方法,从,Image,类派生的任何对象创建图形对象,调用,Graphics.FromImage(),方法即可。例如:,Bitmap myBitmap=new Bitmap(C:myPic.bmp);,Graphics g=Graphics.FromImage(myBitmap);,在,GDI+,中,可使用“画笔”和“画刷”对象来呈现图形、文本和图像。画笔是,Pen,类的实例,可用于绘制线条和空心形状。画刷是从抽象类,Brush,类派生的任何类的实例,可用于填充形状或绘制文本。,Color,对象是表示特定颜色类的实例,画笔和画刷可使用构造函数来指定它所呈现图形的颜色。例如:,Pen myPen=new Pen(Color.Red);/,创建一个红色的画笔,SolidBrush myBrush=new SolidBrush(Color.Blue);/,创建一个深蓝色的画刷,6.1.3 Graphics类3Graphics.From,6.1.3 Graphics,类,Graphics类的常用属性和方法分别如表6.2和6.3所示。,属 性 名 称,说 明,CompositingMode,获取一个值,该值指定如何将合成图像绘制到此,Graphics,CompositingQuality,获取或设置绘制到此,Graphics的合成图像的呈现质量,DpiX,获取此,Graphics 的水平分辨率,DpiY,获取此,Graphics 的垂直分辨率,InterpolationMode,获取或设置与此,Graphics 关联的插补模式,IsClipEmpty,获取一个值,该值指示此,Graphics 的剪辑区域是否为空。,IsVisibleClipEmpty,获取一个值,该值指示此,Graphics 的可见剪辑区域是否为空,PageScale,获取或设置此,Graphics 的全局单位和页单位之间的比例,PageUnit,获取或设置用于此,Graphics 中的页坐标的度量单位,PixelOffsetMode,获取或设置一个值,该值指定在呈现此,Graphics 的过程中像素如何偏移,RenderingOrigin,为抵色处理和阴影画笔获取或设置此,Graphics 的呈现原点,SmoothingMode,获取或设置此,Graphics 的呈现质量,TextContrast,获取或设置呈现文本的灰度校正值,TextRenderingHint,获取或设置与此,Graphics 关联的文本的呈现模式,Transform,获取或设置此,Graphics 的几何世界变换的副本,VisibleClipBounds,获取此,Graphics 的可见剪辑区域的边框,6.1.3 Graphics类Graphics类的常用属性和,6.1.3 Graphics,类,方 法 名 称,说 明,BeginContainer,保存具有此,Graphics 的当前状态的图形容器,然后打开并使用新的图形容器,Clear,清除整个绘图面并以指定背景色填充,Dispose,释放由,Graphics 使用的所有资源,DrawArc,绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分,DrawBezier,绘制由,4 个,Point 结构定义的贝塞尔样条,DrawBeziers,用,Point 结构数组绘制一系列贝塞尔样条,DrawClosedCurve,绘制由,Point 结构的数组定义的闭合基数样条,DrawCurve,绘制经过一组指定的,Point 结构的基数样条,DrawEllipse,绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆,DrawIcon,在指定坐标处绘制由指定的,Icon 表示的图像,DrawImage,在指定位置并且按原始大小绘制指定的,Image,DrawLine,绘制一条连接由坐标对指定的两个点的线条,DrawLines,绘制一系列连接一组,Point 结构的线段,DrawPie,绘制一个扇形,该形状由一个坐标对、宽度、高度以及两条射线所指定的椭圆定义,DrawPolygon,绘制由一组,Point 结构定义的多边形,DrawRectangle,绘制由坐标对、宽度和高度指定的矩形,DrawString,在指定位置并且用指定的,Brush 和,Font 对象绘制指定的文本字符串,FillRectangle,填充由一对坐标、一个宽度和一个高度指定的矩形的内部,Flush,强制执行所有挂起的图形操作并立即返回而不等待操作完成,表,6.3 Graphics,类的常用方法,6.1.3 Graphics类方 法 名 称说 明Begin,6.2,绘图,6.2.1,画笔,画笔(,Pen,)用于绘制直线和曲线,无法继承此类,在,System.Drawing,命名空间中。画笔可用于绘制线条、曲线以及勾勒形状轮廓。下面的代码创建一支基本的黑色画笔:,Pen myPen=new Pen(Color.Black);/,创建一个默认宽度为,1,的黑画笔,Pen myPen=new Pen(Color.Black,5);/,创建一个宽度为,5,的黑画笔,也可以通过已存在的画刷对象创建画笔。下面的代码创建基于已存在画刷(名为,myBrush,)的画笔:,Pen myPen=new Pen(myBrush);/,创建一个画笔,与,myBrush,有相同的属性,并且默认宽度为,1,Pen myPen=new Pen(myBrush,5);/,创建一个画笔,与,myBrush,有相同的属性,并且宽度为,5,6.2 绘图6.2.1 画笔,6.2.2,画刷,画刷是与Graphics对象一起使用来创建实心形状和呈现颜色与图案的对象。几种不同类型的画刷如表6.4所示。,Brush 类 的 子 类,说 明,SolidBrush,画笔的最简单形式,它用纯色进行绘制,HatchBrush,类似于,SolidBrush,但是该类允许从大量预设的图案中选择绘制时要使用的图案,而不是纯色,TextureBrush,使用纹理(如图像)进行绘制,LinearGradientBrush,使用渐变混合的两种颜色进行绘制,PathGradientBrush,基于开发人员定义的唯一路径,使用复杂的混合色渐变进行绘制,6.2.2 画刷画刷是与Graphics对象一起使用来创建实,6.2.2,画刷,【,例,6.1】,设计,WinForm,应用程序分别使用笔和画笔画出以坐标(,30,,,30,)和(,130,,,30,)为起点的长为,70,,高为,50,的矩形。,新建,WinForm,项目,在,Form1,的设计视图中将此窗体调整到适当的大小并将“,Text,”属性设为“画笔与画刷”。从工具箱中拖放,2,个,Button,控件到窗体中,如图,6.2,布局控件。,button1,和,button2,的,Text,属性值分别设置为“画笔”和“画刷”。分别双击“画笔”和“画刷”按钮,其事件代码如下所示:,private void button1_Click(object sender,EventArgs e),Pen,myPen=new Pen(Color.Black);/,定义颜色为黑色的画笔,Graphics g=this.CreateGraphics();/,创建,Graphics,对象,g.DrawRectangle(myPen,30,30,70,50);/,利用画笔画矩形,private void button2_Click(object sender,EventArgs e),Graphics g=this.CreateGraphics();/,创建,Graphics,对象,SolidBrush,mySBrush=new SolidBrush(Color.Red);/,定义颜色为红色的画刷,g.FillRectangle(mySBrush,130,30,70,50);/,利用画刷画矩形,6.2.2 画刷【例6.1】设计WinForm应用程序分别使,6.2.2,画刷,分别单击“画笔”和“画刷”按钮,。运行前后结果如图,6.2,所示。,6.2.2 画刷分别单击“画笔”和“画刷”按钮,。运行前后结,6.2.3,绘制直线,1,绘制一条连接两个,Point,结构的线。,Graphics g=this.CreateGraphics();,g.,DrawLine,(Pen myPen,Point pt1,Point pt2);,其中笔对象,myPen,确定线条的颜色、宽度和样式。,ptl,是,Point,结构,它表示要连接的一个点。,pt2,是,Point,结构,表示要连接的另一个点。,2,绘制一条连接由坐标对指定的两个点的线条。,Graphics g=this.CreateGraphics();,g.,DrawLine,(Pen myPen,int x1,int y1,int x2,int y2);,DrawLine,方法中各参数及说明如表,6.5,所示。,参 数,说 明,pen,确定线条的颜色、宽度和样式,xl,第一个点的,x坐标,yl,第一个点的,y坐标,x2,第二
展开阅读全文