GDI+编程---图形绘制概述
Graphics Device Interface类(GDI+)编程,GDI+是.NET Framework的绘图技术。
Graphics类封装了一个GDI+绘图接口。有3个基本类型的绘图接口:
1.屏幕上的窗口和控件
2.要发送给打印机的页面
3.内存中的位图和图像
Graphics类提供了在这些绘图界面上绘图的功能。我们可以使用它绘制圆弧、曲线、Bezier曲线、椭圆、图像、线条、矩形和文本。
给窗口获得Graphics对象有两种不同的方式。
首先是重写OnPaint()事件,利用事件传入的PaintEventArgs中获取Graphics对象:
protected override void OnPaint(PaintEventArgs e){
Graphics g=e.Graphics;
}
有时,需要直接在窗口中绘图,而无需等待OnPaint()事件。例如,要编写代码,选择窗口中的某些图形对象,或者用鼠标拖动一些对象,就需要直接在窗口中绘图,在窗体上调用CreateGraphics()方法就可以获得一个Graphics对象,这是Form类继承自Control类的另一种方法:
protected void Form1_click(object sender,System.EventArgs e)
{
Graphics g=this.CreateGraphics();
g.Dispose();
}
对象的删除
有几种数据类型对于调用Dispose()是非常重要的,否则一些资源就不能释放。这些类执行IDisposable接口。Graphics是这些类中的一个。
如果是从OnPaint()事件中获得的Graphics对象,而不是创建了该对象,就不应调用Dispose(),但如果调用了CreateGraphics(),就必须调用Dispose().
有一种更简单的方式可以处理需要正确删除的对象,即使用Using结构。在对象超出作用域时,Using结构会自动调用Dispose().
using示例用法:
using(Graphics g=this.CreateGraphics())
{
g.DrawLine(Pens.Black,new Point(0,0),new Point(3,5));
}
上面的,其代码等价于:
Graphics g =this.CreateGraphics();
try
{
g.DrawLine(Pens.Black,new Point(0,0),new Point(3,5);
}
finally
{
if(g!=null)
((IDisposable)g).Dispose();
}
坐标系统
GDI+的坐标系统建立在通过像素中心的假想网络线上,这些网络线从0开始,其左上角的交点是x=0,y=0
从点1,1到点5,1绘制一个像素宽的水平线,如图:
从点1,1到点1,4绘制一个像素高的垂直线,如图: