C#笔记.docx
- 文档编号:6797650
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:13
- 大小:271.17KB
C#笔记.docx
《C#笔记.docx》由会员分享,可在线阅读,更多相关《C#笔记.docx(13页珍藏版)》请在冰点文库上搜索。
C#笔记
C#学习
图形图像绘制基础
GDI+概述
GDI+:
GraphicsDeviceInterface(图形设备接口),它提供了高级图形图像处理功能。
在C#中,通过一套部署为托管代码的类来展现提供的图形图像处理功能,这套类被称为GDI+的托管类。
利用GDI+的托管类可以轻松实现颜色渐变、透明处理、纹理处理、拉伸和缩放等多种高级功能。
GDI+主要提供了三类服务:
1.二维矢量图形处理
2.二维图像处理
3.文字显示
在C#中,所有图形图像处理功能都包含在以下名称空间下:
System.Drawing名称空间
提供了对GDI+基本图形功能的访问,主要有Graphics类Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等。
System.Drawing.Drawing2D名称空间
提供了高级的二维和矢量图形处理功能。
主要有:
梯度型画刷、Matrix类(用于定义几何变换)和GraphicsPath类等。
System.Drawing.Imaging名称空间
提供了高级图像处理功能。
System.Drawing.Text名称空间
提供了高级字体和文本排版功能
坐标系
1.GDI+坐标系中的基本结构
Point
表示某个特定位置相对于原点的水平和垂直距离。
例如:
Pointp=newPoint(1,1);
Size
也有两个整型属性来表示水平和垂直距离—Width和Height。
例如:
Sizes=newSize(5,5);
Rectangle
用来指定矩形的坐标,它由一个Point和一个Size组成,其中Point表示矩形左上角,Size表示矩形大小。
例如:
1)在构造函数中分别指定x坐标、y坐标、宽度和高度。
Rectangler1=newRectangle(1,2,5,6);
2)在构造函数中指定Point位置和Size结构。
Pointp=newPoint(1,2);
Sizes=newSize(5,6);
Rectangler2=newRectangle(p,s);
2.GDI+中坐标系的分类
世界坐标系(Worldcoordinates)
是一种通用的坐标系,适用于任何计算机设备。
设备坐标系(Devicecoordinates)
是指显示设备或打印设备使用的坐标系,它的特点是以设备上的像素点为单位。
页面坐标系(Pagecoordinates)
是指某种映射模式下的一种坐标系。
默认情况下,世界坐标系、设备坐标系和页面坐标系是一致的。
3.不同坐标系的转换
调用GDI+里的Graphics对象进行操作时,输入的坐标为世界坐标系中的坐标,而在屏幕或者打印机上显示的是设备坐标系中的坐标。
因此,每次输出时,系统都会自动进行两次坐标变换——第一次是从世界坐标向页面坐标的世界变换(worldtransformation),第二次是从页面坐标向设备坐标的页面变换(pagetransformation)。
在程序中,可以通过调用Graphics对象的TranslateTransform方法改变世界变换的原点,通过设置Graphics对象的PageUnit属性改变页面变换的度量单位。
【例9-1】不同坐标系之间的转换示例
privatevoidForm1_Paint(objectsender,PaintEventArgse)
{
GraphicsmyGraphics=e.Graphics;
myGraphics.TranslateTransform(10,10);
myGraphics.PageUnit=GraphicsUnit.Pixel;
PenmyPen=newPen(Color.Red,2);
myGraphics.DrawLine(myPen,0,0,200,200);
}
上面的代码分别调用了Graphics对象的世界变换和页面变换,使用英寸作为度量单位,并让坐标系的原点距工作区左边缘0.5英寸、距工作区顶部0.5英寸,然后从(0,0)到(2,2)绘制一条直线。
右图为运行效图。
Graphics类
绘制图形图像前,首先必须创建Graphics对象,然后利用这个对象绘制直线、曲线、椭圆等图形图像。
有三种常见的创建Graphics对象的方法。
1.在窗体或控件的Paint事件中获取Graphics对象。
例如:
privatevoidForm1_Paint(……)
{
Graphicsg=e.Graphics;
}
2.通过当前窗体的CreateGraphics方法,把当前窗体的画笔、字体、颜色作为默认值,获取对Graphics对象的引用。
例如:
Graphicsg=this.CreateGraphics();
……
3.从继承自图像的任何对象创建Graphics对象,例如:
BitmapmyBitmap=newBitmap(@"C:
\mytest1\Pics\myPic.bmp");
Graphicsg=Graphics.FromImage(myBitmap);
颜色
颜色封装在System.Drawing.Color结构中。
人眼可以分辨的任何颜色都是由一定的红、绿、蓝三色光组成。
任何一种颜色都可以有四个分量:
R:
红色,取值范围0~255,0表示没有红色成分,255为饱和红色;
G:
绿色,取值范围0~255,0表示没有绿色成分,255为饱和绿色;
B:
蓝色,取值范围0~255,0表示没有蓝色成分,255为饱和蓝色;
A:
Alpha值,即透明度,取值范围0~255,0表示完全透明,255表示完全不透明。
在代码中声明颜色的方式常用有两种:
1.调用静态方法Color.FromArgb()指定任意颜色,这种方法有两种常用形式。
u第一种形式为直接指定三种颜色,方法原型为:
PublicstaticColorFromArgb(intred,intgreen,intblue);
三个参数分别表示R、G、B三色,Alpha值使用默认值255,即完全不透明。
例如:
Colorred=Color.FromArgb(255,0,0);
u第二种形式为四个参数,方法原型为:
PublicstaticColorFromArgb(intalpha,intred,intgreen,intblue);
四个参数分别表示透明度、R、G、B三色值。
2.系统预定义颜色
System.Drawing.Color结构中提供了许多静态性,每个属性返回一个命名颜色,在Color结构中已经预定义了141种颜色,可以直接使用。
例如:
this.BackColor=Color.White;
Paint事件
在C#程序中,最简单的方式就是在Paint事件中绘制图形图像,任何一个控件,包括窗体本身,系统都提供了对应的Paint事件。
如果在控件的Paint事件中利用传递的参数获取Graphics对象,则绘制的图形图像仅在该控件内显示。
如果在窗体的Paint事件中绘制,则绘制的图形图像在该窗体内显示。
绘制基本图形
创建画笔
画笔(Pen)
画笔可用于绘制绘制具有指定宽度和样式的直线、曲线或轮廓形状。
下面的示例说明如何创建一支基本的蓝色画笔:
PenmyPen=newPen(Color.Blue);
PenmyPen=newPen(Color.Blue,10.5f);
也可以从画刷对象创建画笔对象,例如:
SolidBrushmyBrush=newSolidBrush(Color.Red);
PenmyPen=newPen(myBrush);
PenmyPen=newPen(myBrush,5);
绘制直线
所有绘制图形的方法都位于Graphics中。
DrawLine方法:
绘制一条直线,常用形式:
1)绘制一条连接指定两个Point结构的线。
publicvoidDrawLine(Penpen,Pointpt1,Pointpt2)
其中,Pen对象确定线条的颜色、宽度和样式;Point结构确定起点和终点。
2)绘制一条由坐标对指定的两个点的线。
publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2)
其中,Pen对象确定线条的颜色、宽度和样式;x1,y1为起点坐标,x2,y2为终点坐标。
在.NET框架中,有一个LineCap枚举,该枚举用于指定系统预定义的线帽,例如圆形、方形、三角形、菱形、箭头等。
在System.Drawing.Drawing2D命名空间下,有一个AdjustableArrowCap类,利用该类可以自定义箭头线帽的形状。
AdjustableArrowCaparrow=newAdjustableArrowCap(8,10,false);
PenmyPen=newPen(Color.Blue,2);
myPen.CustomEndCap=arrow;
Graphics类提供的TranslateTransform方法可以帮助我们实现平移坐标系的功能。
【例8-1】用毫米作为度量单位,绘制一条数学上使用的坐标轴,即让坐标系的原点位于窗体中心,横向从左到右为x正方向,纵向从下到上为y轴正方向,然后在此坐标系统下绘制一条从(0,0)点到(20,20)的直线。
运行效果如上图:
【例8-2】利用DrawLines方法和将根据正弦函数计算出来的多个点之间用直线依次相连,构成正弦曲线显示出来。
设计界面和运行界面如下:
绘制矩形
绘制矩形的方法:
publicvoidDrawRectangle(Penpen,Rectanglerect)
该方法根据指定的矩形结构rect来绘制矩形。
publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight)
该方法通过矩形的左上角坐标(x,y)和宽(width)、高(height)来绘制矩形。
【例8-3】演示矩形的绘制方法。
运行效果如下:
多边形
多边形是由3条或3条以上的边组成的闭合图形,例如三角形、矩形、五边形和六边形等都属于多边形。
DrawPolygon方法:
绘制多边形的轮廓
DrawPolygon方法一般用于绘制多边形的轮廓,该方法常用形式如下:
publicvoidDrawPolygon(Penpen,Point[ ]points)
【例8-4】演示多边形的绘制方法。
设计界面和运行效果如右:
曲线
1.DrawCurve方法
用光滑的曲线把给定的点连接起来,常用形式有:
1)publicvoidDrawCurve(Penpen,Point[]points)
其中,Point结构类型的数组中指明各节点,默认弯曲强度为0.5。
注意,数组中至少要有3个元素。
2)publicvoidDrawCurve(Penpen,Point[]points,floattension)
其中,tension指定弯曲强度,该值范围为0.0f-1.0f,超出此范围会产生异常。
当弯曲强度为零时,就是直线。
2.DrawClosedCurve方法
通过连接数组中节点画一个平滑的曲线,此方法会自动把首尾节点连接起来构成封闭曲线。
注意数组中的节点至少要有3个点组成,默认弯曲强度为0.5。
1)publicvoidDrawClosedCurve(Penpen,Point[]points)
其中,Point结构类型的数组中指明各节点。
2)publicvoidDrawClosedCurve(Penpen,Point[]points,floattensionFillModefillmode)
其中,fillmode指明曲线封闭区域内以何种方式填充。
3.贝塞尔曲线
每段贝塞尔曲线由4个点组成,两个端点(p1为起点,p2为终点)和两个控制点(c1和c2)。
曲线不经过控制点,但是控制点如同一个磁体吸引曲线,影响并引导曲线向某个方向拉伸。
1)DrawBezier方法:
绘制一段贝塞尔曲线的,常用形式:
publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)
其中pt1、pt2、pt3和pt4分别指定四个点。
2)DrawBeziers方法:
绘制多段贝塞尔曲线,常用形式:
publicvoidDrawBezier(Penpen,Point[]points)
其中points是Point结构的数组,第一段贝塞尔曲线由点数组中的第1-4个点绘制而成。
以后每段曲线只需要3个点:
2个控制点和一个结束点。
前一段曲线的结束点会自动被用作后一段曲线的起始点。
【例8-5】绘制曲线示例。
绘制椭圆和扇形
1.绘制椭圆(DrawEllipse方法)
1)给定椭圆左上角坐标和椭圆的外接矩形的宽度和高度
publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);
其中,pen为Pen对象,x,y为椭圆左上角的坐标,width定义椭圆外接矩形的宽度,height定义椭圆外接矩形的高度。
2)给定椭圆外接矩形的结构
publicvoidDrawEllipse(Penpen,Rectanglerect);
其中,rect为Rectangle结构,用于确定椭圆的边界。
2.绘制扇形(DrawPie方法)
1)publicvoidDrawpie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);
其中,pen为Pen对象,x,y为椭圆左上角的坐标,width定义扇形外接矩形的宽度,height定义扇形外接矩形的高度,startAngle为起始角度(以度为单位),sweepAngle为延伸角度。
2)publicvoidDrawPie(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle);
其中,rect为Rectangle结构,用于确定扇形的外接矩形。
【例8-6】演示椭圆和扇形的绘制方法。
运行效果如下:
填充图形
对于封闭的图形来说,除了用与其对应的Draw方法绘制以外,每个封闭图形都有其对应的以“Fill”为前缀的方法,例如与椭圆对应的填充方法为FillEllipse方法,与多边形对应的填充方法为FillPolygon方法等。
画刷
画刷(Brush)
画刷是可以与Graphics对象一起使用来创建实心形状和呈现文本的对象。
可以用来填充各种图形形状,如矩形、椭圆、饼型图和多边形等。
下表列出了几种不同类型的画刷。
类
说明
SolidBrush
用纯色填充图形
TextureBrush
用基于光栅的图像(位图、JPG等)
填充图形
LinearGradientBrush
用颜色渐变填充图形
PathGradientBrush
用渐变效果填充图形
HatchBrush
用各种图案填充图形
单色画刷
1)使用SolidBrush类定义单色画刷
SolidBrush类用于定义单色画刷。
该类可以填充图形,比如矩形、椭圆、多边形和路径。
例如:
SolidBrushsolidBrush=newSolidBrush(Color.Red);
Rectangler=newRectangle(5,10,100,100);
g.FillEllipse(solidBrush,r);
【例8-7】单色画刷演示示例。
创建渐变画刷
2)使用LinearGradientBrush类定义线性渐变
LinearGradientBrush对象用颜色线性渐变填充图形。
提供了以下三种构造函数:
(1)提供两个点和两种颜色。
PublicLinearGradientBrush(Pointpoint1,Pointpoint2,Colorcolor1,Colorcolor2)
(2)提供一个矩形和一个角度。
PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,floatangle)
(3)指定渐变的模式。
PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,LinearGradientModelinearGradientMode)
【例8-8】颜色渐变效果。
运行效果:
填充阴影
3)使用HatchBrush类填充简单图案
HatchBrush类提供的画刷可以用各种图案填充图形。
通过Hatch类型可以设置影线样式。
在创建影线的画刷时,能设定前景色、背景色和影线样式。
有56种不同的影线样式枚举,该枚举可以参看System.Drawing.Drawing2D.HatchStyle枚举。
例如:
HatchStyle.Horizontal水平线的图案
HatchStyle.ForwardDiagonal从左上到右下的对角线的线条图案
HatchStyle.DiagonalBrick具有分层砖块外观的阴影
HatchStyle.Shingle带有对角分层鹅卵石外观的阴影
HatchStyle.Sphere具有球体彼此相邻放置的外观的阴影
【例8-9】阴影效果示例。
效果如下:
填充纹理
4)使用TextureBrush类填充复杂图像
TextureBrush类使用图像作为填充的样式,它可以使用例如.bmp、.jpg、.png等格式的图像。
初始化一个新的TextureBrush对象需要指定填充的图像。
TextureBrush类有多个重载的构造函数,常用有:
publicTextureBrush(Imageimage,Rectanglerect)
publicTextureBrush(Imageimage,WrapModewrapMode,Rectanglerect)
其中,image指定要填充的图像;rect指定图像的矩形块;wrapMode指定如何填充图像,这是一个枚举类型,其值如表8-2所示。
【例8-10】创建TextureBrush示例。
运行效果如下:
填充路径
图形与图像的平移、旋转与缩放
文字处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 笔记