概述
如果发现有什么错误地方,请指正,本文章仅仅是个人的了解和学习结果。
本文章介绍Graphics类的使用并通过demo进行了解,至于User32.Dll的使用在其他文章进行详细介绍。
1.相关介绍。
2.属性。
3.函数。
4.创建Graphics。
5.注意事项
6.Demo。
个人理解:Graphics是一个画家,而创建Graphics的参数Handle或者Image等为画板,当Graphics进行绘制时需要的Brush,Pen等则为工具,Graphics的函数则为行为。
1.介绍Graphics类和相关知识。
1.1Graphics
Graphics类包含在System.Drawing名称空间下,是密封类(Sealed)无法被继承,封装一个 GDI+ 绘图图面。
Graphics对象表示GDI+绘图表面,是用于创建图形图像的对象。
1.2GDI和GDI+:
GDI图形设备接口(Graphics Device Interface)。
GDI+是微软在操作系统中提供的新的图形设备接口,其通过一套部署为托管代码(由CLR执行的代码)的类来展示,这套类被称为GDI+的托管类接口。
1.3System.Drawing命名空间
GDI+相关的类全部在此命名空间下。
Graphics 类提供了绘制到显示设备的方法。诸如 Rectangle 和 Point 等类可封装 GDI+ 基元。Pen 类用于绘制直线和曲线,而从抽象类 Brush 派生出的类则用于填充形状的内部。
不支持在 Windows 或 ASP.NET 服务中使用 System.Drawing 命名空间中的类。
2.Graphics属性介绍:
2.1Clip
获取或设置Region,该对象限定此Graphics的绘图区域(此属性在不保证范围的情况下,请勿进行修改,否则会导致绘图结果只显示部分,因为绘图相关坐标不在此区域内)
2.2ClipBounds
获取一个 RectangleF 结构,该结构限定Graphics 的剪辑区域。
2.3CompositingMode
获取一个值,该值指定如何将合成图像绘制到此Graphics。
2.4CompositingQuality
获取或设置绘制到此Graphics 的合成图像的呈现质量。
2.5InterpolationMode
获取或设置与此 System.Drawing.Graphics 关联的插补模式
2.6IsClipEmpty
获取一个值,该值指示此Graphics 的剪辑区域是否为空。
2.7IsVisibleClipEmpty
获取一个值,该值指示此Graphics 的可见剪辑区域是否为空。
2.8PageScale
获取或设置此Graphics 的世界单位和页单位之间的比例。
2.9PageUnit
获取或设置用于此Graphics 中的页坐标的度量单位。
2.10PixelOffsetMode
获取或设置一个值,该值指定在呈现此Graphics 的过程中像素如何偏移。
2.11RenderingOrigin
为抵色处理和阴影画笔获取或设置此Graphics 的呈现原点
2.12RenderingOrigin
为抵色处理和阴影画笔获取或设置此Graphics 的呈现原点。
2.13TextRenderingHint
获取或设置与此Graphics 关联的文本的呈现模式。
2.14Transform
获取或设置此Graphics 的几何世界变换的副本。
2.15VisibleClipBounds
获取此Graphics 的可见剪辑区域的边框。
3.函数
3.1AddMetafileComment(byte[] data)
向当前 System.Drawing.Imaging.Metafile 添加注释。
3.2BeginContainer()
重载overload
保存具有此 System.Drawing.Graphics 的当前状态的图形容器,然后打开并使用新的图形容器。
3.3Clear(Color color)
清除整个绘图面并以指定背景色填充。
3.4 CopyFromScreen
重载overload
执行颜色数据(对应于由像素组成的矩形)从屏幕到 System.Drawing.Graphics 的绘图图面的位块传输。
3.5 Dispose
释放由 System.Drawing.Graphics 使用的所有资源。
3.6 DrawArc
overload
绘制一段弧线,它表示 System.Drawing.Rectangle 结构指定的椭圆的一部分。
3.7 DrawBezier
overload
绘制贝塞尔样条。
3.8 DrawClosedCurve
overload
绘制闭合基数样条。
3.9 DrawCurve
overload
绘制基数样条。
3.10 DrawEllipse
overload
绘制椭圆。
3.11 DrawIcon
overload
绘制指定的 System.Drawing.Icon 表示的图像。
3.12DrawIconUnstretched
绘制指定的 System.Drawing.Icon 表示的图像,而不缩放该图像。
3.13DrawImage
overload
绘制指定的 System.Drawing.Image。
3.14DrawImageUnscaled
overload
使用图像的原始物理大小绘制指定的图像。
3.15DrawLine
overload
绘制一条线
3.16DrawPath
绘制相互连接的直线和曲线
3.17DrawPie
overload
绘制扇形
3.18DrawPolygon
overload
绘制多边形
3.20 DrawRectangle
overload
绘制指定的矩形
3.21 DrawString
overload
绘制指定字符串
3.22EndContainer(GraphicsContainer container)
关闭当前图形容器,并将此 System.Drawing.Graphics 的状态还原到通过调用 System.Drawing.Graphics.BeginContainer()方法保存的状态。
3.23 EnumerateMetafile
overload
将指定 System.Drawing.Imaging.Metafile 中的记录逐个发送到回调方法以在指定的位置显示。
3.24 ExcludeClip
overload
更新此 System.Drawing.Graphics 的剪辑区域,以排除 System.Drawing.Rectangle 结构所指定的区域。
3.25 FillClosedCurve
overload
填充由 System.Drawing.Point 结构数组定义的闭合基数样条曲线的内部。
3.26 FillEllipse
填充 System.Drawing.Rectangle 结构指定的边框所定义的椭圆的内部。
3.27FillPath
填充 System.Drawing.Drawing2D.GraphicsPath 的内部。
3.28 FillPie
填充椭圆所定义的扇形区的内部,该椭圆由 System.Drawing.RectangleF 结构和两条射线指定。
3.29FillPolygon
填充 System.Drawing.Point 结构指定的点数组所定义的多边形的内部。
3.30FillRectangle
填充 System.Drawing.Rectangle 结构指定的矩形的内部。
3.31 FillRegion
填充 System.Drawing.Region 的内部。
3.32 Flush
overload
强制执行所有挂起的图形操作并立即返回而不等待操作完成。
3.33 GetContextInfo
获取累积的图形上下文。
3.34 GetHalftonePalette
获取当前 Windows 的半色调调色板的句柄。
3.35GetHdc
获取与此 System.Drawing.Graphics 关联的设备上下文的句柄。
3.36 GetNearestColor
获取与指定的 System.Drawing.Color 结构最接近的颜色。
3.37 MeasureCharacterRanges
获取 System.Drawing.Region 对象的数组,其中每个对象将字符位置的范围限定在指定字符串内。
3.38 MeasureString
测量用指定的 System.Drawing.Font 绘制的指定字符串。
3.39 Save
保存此 System.Drawing.Graphics 的当前状态,并用 System.Drawing.Drawing2D.GraphicsState.
4.构造函数
Graphics的构造函数无法访问,没办法new出来。
4.1Graphics提供五中静态方法可以创建Graphics对象。
1) Graphics.FromImage(Image);
2)Graphics.FromHdcInternal(IntPtr hdc);
3)Graphics. FromHwnd(IntPtr hwnd);
4)Graphics.FromHdc(IntPtr hdc);
5)Graphics.FromHdc(IntPtr hdc, IntPtr hdevice);
4.2很多派生自事件参数EventArgs(包含事件数据的类的基类)的类中都有Graphics属性,例如PrintPageEventArgs、PaintEventArgs等。
e.Graphics.
5.注意事项:
1.在哪个控件上进行绘制,那么必须通过这个控件进行实例化Graphics对象。
2.注意控件的层次问题,防止由于层次问题导致的绘图效果无法看到,例如在Form进行绘制,而Form中有Panel。
3.由于窗体拖动问题,或者最小化等操作,会导致窗体和控件的重新绘制,也就是触发Paint事件,导致绘制内容丢失,所以,我个人在进行绘画的操作都是在控件Paint事件中重新绘制图画或者是在图片上绘制内容,通过窗体中的Picture进行显示绘制内容。
6.Demo进行举例讲解
Code:
//panel的绘制事件
private void panel1_Paint(object sender, PaintEventArgs e)
{
//我们能看到事件数据的对象e,包含属性Graphics
Graphics graphicsOfE = e.Graphics;
//Brush是个抽象类,无法被实现,派生类SolidBrush等。
graphicsOfE.DrawString("有事件数据对象进行绘制而成", new Font("楷体",10, FontStyle.Bold), new SolidBrush(Color.Green), new Point(200, 100));
//使用Handle进行绘制对比
_graphicsOfPanel.DrawPie(new Pen(Color.Red) { Width = 4 }, new Rectangle(0, 200, 200, 200), 30, 30);
}
//此处无任何效果
private void Form1_Load(object sender, EventArgs e)
{
//创建Graphics对象
_graphicsOfPanel = Graphics.FromHwnd(this.panel1.Handle);
//绘制线,Pens类,快速获取pen对象
_graphicsOfPanel.DrawLine(Pens.Blue, new Point(0, 0), new Point(200, 200));
}
private void button1_Click(object sender, EventArgs e)
{
//此处绘制没问题,在窗体最小化,或者将窗体放置到屏幕不可见部分后,绘图内容会丢失。
//因为最小化后再次显示窗体会进行重新绘制
_graphicsOfPanel.DrawRectangle(Pens.Blue, new Rectangle(200, 200, 200, 200));
}
Effect Pictrue:
![这里写图片描述](https://img-blog.csdn.net/20170726070824812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ194dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
After Moving Pictrue:
![这里写图片描述](https://img-blog.csdn.net/20170726070527613?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ194dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最后
以上就是幸福小丸子为你收集整理的Graphics类及相关类详解的全部内容,希望文章能够帮你解决Graphics类及相关类详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复