本文详细讲解了C#中的GDI图像编程,并通过示例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
一、Graphics
GDI是GDI (Windows图形设备接口)的继承者。它是由提供的应用程序编程接口。操作图形的. NET框架。主要用于在表单上绘制各种图形图像,可用于绘制各种数据图像、数学模拟等。
Graphics类是GDI的核心,它提供了将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆、图像和文本的方法,是所有GDI操作的基础类。在绘制之前,必须在指定的窗体上创建一个Graphics对象,然后才能调用Graphics类的方法进行绘制。
1、创建Graphics类对象
1.绘画事件
作为PaintEventArgs的一部分在窗体或控件的Paint事件中创建。此方法通常在为控件创建绘制代码时使用。
例如,在Paint事件中创建一个图形对象:
公共分部类Form1 : Form
{
受保护的覆盖void OnPaint(PaintEventArgs e)
{
基地。OnPaint(e);
图形g=e .图形;//e . clip rectacle;//剪切该区域,即被遮挡的部分
g.画线(钢笔。小麦,0,0,2,2);
}
}
2.CreateGraphics方法
调用窗体或控件的CreateGraphics方法以获取对Graphics对象的引用,该对象代表控件或窗体的绘图图片。如果在现有窗体或控件上绘图,应使用此方法。
例如,在窗体的Load事件中,Graphics对象由CreateGraphics方法创建。
Privateform1 _ Load (object sender,eventargs e)//表单的加载事件
{
图形g;//声明一个图形对象
g=这个。create graphics();
}
3.图形。FromImage方法
从Image继承的任何对象创建一个Graphics对象,然后调用Graphics。FromImage方法,这在需要改变现有图像时非常有用。例如:
私有void Form1_Load(对象发送方,EventArgs e)
{
Bitmap mbit=新位图(@ ' C:\ test . BMP ');
图形g=图形。from image(mbit);
}
2、Graphics类的属性
获取或设置定义此图形的绘图区域的区域。ClipBounds获取一个RectangleF结构,该结构定义此图形的剪辑区域。VisibleClipBounds获取此图形的可见剪辑区域的边框。CompositingQuality获取或设置绘制到此图形的合成图像的呈现质量。SmoothingMode获取或设置此图形的呈现质量。DpiX获取这个图形的水平分辨率。DpiY获得这个图形的垂直分辨率。获取或设置此图形的世界单位和页面单位之间的比率。获取或设置此图形中页面坐标的度量单位。
3、Graphics类的常用方法
画线
绘制一条连接由坐标对象指定的两点的线。
绘制连接一组点结构的线段列表。
绘制由四个点结构定义的贝塞尔曲线。
DrawBeziers从一个点结构数组中绘制一系列贝塞尔样条。
通过一组指定的点结构绘制一条基数样条,以绘制一条可填充的线。
绘制一个由一对坐标(宽度和高度)指定的椭圆。
DrawPath绘制GraphicsPath对象。
DrawPie绘制一个由坐标对象、宽度和高度指定的扇形,以及由两条射线指定的椭圆。
绘制由一组点结构定义的多边形。
DrawRectangle由坐标对绘制。和一个具有指定宽度和高度的矩形。
绘制由rectangle结构指定的一系列矩形。
DrawArc绘制一个弧,它表示由一对坐标和宽度和高度指定的椭圆的部分填充区域。
FillEllipse填充由边框定义的椭圆的内部,边框由一对坐标、高度和宽度指定。
FillPath填充GraphicsPath对象的内部。
FillPie填充了扇区的内部。
FillPolygon填充多边形的内部。
FillRectangle填充由一对坐标、宽度和高度指定的矩形的内部。
FillRectangles填充由Rectangle结构指定的某些列矩阵的内部。
FillRegion填充区域对象的内部绘制字符串、图片和图标。
DrawString位于指定位置,用指定的Brush和Font对象绘制指定的文本字符串。
在指定坐标绘制由指定图标对象表示的图像。
在指定位置绘制图像,并以原始大小绘制指定的图像对象。其他的
MeasureString(String,Font)测量用指定字体绘制的指定字符串。
FromImage从指定的Image对象创建一个由行组成的Graphics对象。
保存这个Graphics对象的当前状态,GraphicsState对象标识保存的状态。
清除整个绘图图面,并用指定的背景色填充它。
释放该图形对象使用的所有资源。
二、坐标系统
GDI定义了三种坐标系,并提供了三种坐标转换方法。TransformPoints()。
全球坐标系统。页面坐标系:左上角为原点,水平X轴向右为正,垂直Y轴向下为正。是单位像素。这是默认坐标系。设备坐标系:可以指定特定测量单位的页面坐标系。如果单位是像素,则与页面坐标系相同。
1、点结构:Point和PointF
point结构有两个成员:X和Y,分别代表点的X轴和Y轴的坐标。其常用构造函数如下:
点p1=新点(int X,int Y);//X,Y是一个整数
PointF p2=新的PointF(float X,float Y);//X,Y是浮点数。
2、尺寸结构Size和SizeF
Size和SizeF用于指示大小,有两个成员:宽度和高度。常见的构造函数如下:
公共大小(int width,int height);
public SizeF(浮动宽度,浮动高度);
3、矩形结构Rectangle和RectangleF
结构Rectangle和RectangleF用于表示一个矩形。常见属性如下:
Top,Left,Bottom,right:矩形结构的宽度和高度坐标:获取或设置这个矩形结构的宽度和高度。Size:获取或设置此矩形的大小。x,Y:获取或设置此矩形结构左上角的x,Y坐标。
它的常见构造函数有:
//参数是矩形左上角坐标的点结构位置和代表矩形宽度和高度的大小结构Size。
矩形(点位置,大小尺寸);//参数也可以是PointF和SizeF
//参数是矩形左上角的X和Y坐标,宽度和高度。
矩形(int X,int Y,int width,int height);//X和y也可以是浮点数。
4、路径类GraphicsPath
GraphicsPath类表示一系列相互连接的直线和曲线。该类不能被继承。
图形g=e .图形;
g.填充矩形(画笔。白色,这个。client rectangle);
graphics path gp=new graphics path();
gp。AddLine(10,10,10,50);
gp。AddBezier(10,50,10,55,25,70,30,70);
gp。AddLine(30,70,60,70);
//关闭图形
gp。close figure();
//GraphicsPath类本身不提供显示创建路径的功能,所以需要将Path对象传递给Graphics类的一个方法来显示。
g.DrawPath(钢笔。黑色,gp);
g.填充路径(画笔。橙色,gp);//用橙色填充路径,
gp。dispose();
g.dispose();
5、区域类Region类
Region类表示由矩形或路径组成图形形状的内部。
1.从GraphicsPath路径对象创建一个区域,
graphics path gp=new graphics path();
gp。AddLine(10,10,10,50);
gp。AddBezier(10,50,10,55,25,70,30,70);
gp。AddLine(30,70,60,70);
//关闭图形
gp。close figure();
reg=新区域(gp);//从GraphicsPath对象创建一个区域对象
//填充该区域
g.FillRegion(画笔。绿色,reg);
2.从各种图形中创建:
Region reg=新区域(新矩形(10,10,80,20));
3.从一个区域创建另一个区域。
区域r1=新区域(新矩形(10,10,80,20));
RegionData r1Data=r1。GetRegionData();//区域数据
区域r2=新区域(R1数据);//构造函数不接受区域对象本身,但可以接受区域数据数组。
4.区域的并集和交集
示例:
图形g=e .图形;
Rectangle rect1=新矩形(50,10,50,130);
Rectangle rect2=新矩形(10,50,130,50);
//将区域设置为第一个矩形
Region reg=新区域(rect 1);
//使用Rect2提取区域中的交集
注册。intersect(rect 2);
g.FillRegion(画笔。橙色,reg);
g.绘制矩形(钢笔。黑色,正面1);
g.绘制矩形(钢笔。黑色,正面2);
三、颜色
1、Color结构
Color结构表示颜色,该结构包含一个表示颜色的无符号32位数字。任何颜色都可以用ARGB色(阿尔法、红、绿、蓝)来表示。颜色结构通过语句属性公开了140种命名颜色。常见的方法如下:
public static Color from argb(int alpha,int rr,int gg,int bb);
从四个分量值(透明度、红色、绿色和蓝色)创建一个颜色结构。每个组件的值限制为8位(小于256)。alpha值表示透明,=0表示完全透明,=255表示完全不透明公共静态颜色来自argb (intrr,intgg,intbb);
从指定的8位颜色值(红色、绿色和蓝色)创建Color结构。透明度值默认为255(完全不透明)。每个组件的值限制为8位(小于256)。红色(255,0,0),绿色(0,255,0)和蓝色(0,0,255)。公共静态颜色FromArgb(int alpha,Color Color);
使用新指定的透明度值alpha,从指定的颜色结构创建新的颜色结构。alpha值限制为8位。
创建实例
//创建颜色实例的参数是R,G,B;//参数为红绿蓝,默认透明度,即完全不透明。
颜色cl=颜色。FromArgb(200,200,200);
//调用静态FromName方法
颜色cl=颜色。from name(' powder blue ');//字符串参数必须包含KnownColor枚举值的名称。
使用颜色:
颜色红色=彩色。红色;
红色。get brightness();
红色。GetHue();
红色。get saturation();
2、ColorTranslator类
FromHtml(String)将Html颜色表示转化为GDI颜色结构。
Color myColor=ColorTranslator。FromHtml('蓝色');
Color myColor=ColorTranslator。from html(' h 00000 ');
ToHtml(Color)将指定的颜色结构转换为Html字符串颜色表示形式。
string html color=color translator。ToHtml(颜色。红色);
string html color=color translator。ToHtml(颜色。from argb(255255255));
四、画笔Pen类
画笔,定义用于绘制直线和曲线的对象。
定义画笔:
Pen pen1=新笔(彩色,单支);//参数为Color color,单精度浮点Sigle;默认宽度为1;
Pen pen2=钢笔(毛笔,单支);//用指定的钢笔和画笔初始化Width类的新实例。
使用画笔:
//画一条实线
钢笔钢笔=新钢笔(颜色。红色,3);
//确定行的第一个位置
Point point1=新点(10,50);
Point point2=新点(250,50);
图形g=这个。create graphics();
g.DrawLine(笔,点1,点2);
五、画刷Brush
画笔:定义用于填充图形形状(如矩形、椭圆形、饼形、多边形和封闭路径)内部的对象。只是一个抽象基类。
Rectangle rect1=新矩形(20,80,250,100);
//(实心画笔)
SolidBrush sbrush=新SolidBrush(颜色。dark orchid);
//(纹理画笔)
texture brush texture brush=new texture brush(新位图(@ ' e:/123 . jpg ');
//(渐变,线性渐进画笔)
LinearGradientBrush l brush=new LinearGradientBrush(rect 1,Color。深橙色,彩色。海蓝宝石,45);
//路径渐进画笔
PathGradientBrush path brush=new PathGradientBrush(graphics path);
//(阴影笔刷)
hatch brush HB rush=new hatch brush(hatch style。对角交叉,颜色。深橙色,彩色。海蓝宝石);
e.Graphics.FillRectangle(sbrush,rect 1);//(实心画笔)
e.graphics . fill rectangle(texture brush,rect 1);//(纹理画笔)
e.Graphics.FillRectangle(lbrush,rect 1);//(渐变画笔)
e.Graphics.FillRectangle(hbrush,rect 1);//(阴影笔刷)
六、字体 Font
Font类有两个构造函数:
第一个是新字体(字体名称,字体大小),比如label1。Font=新字体(' bold ',9)。
第二个是新字体(字体名称、字号、字体样式),第三个参数是枚举类型。
定义字体:
//例如,将标签控件字体修改为斜体:
1.label=新字体(' bold ',9,label 1 . font . style | font style . italic);
//将标签控件字体修改为非斜体:
1.label=新字体(' bold ',9,label 1 . font . style ~ font style . italic);
字体用法
//创建字体和画笔。
Font drawFont=new Font('Arial ',16);
solid brush draw brush=new solid brush(颜色。黑色);
//将字符串绘制到屏幕上。
e.Graphics.DrawString('示例文本',drawFont,drawBrush,new PointF(150.0F,150.0 f));
七、图像
看见
图像类,打印打印相关
关于C#图像编程GDI的这篇文章到此为止。希望对大家的学习有帮助,也希望大家多多支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。