在绘制一个复杂图形时,准确绘制出希望绘制的像素是很重要的,而在处理曲线时这不是很重要。绘图表面本身是基于光栅的,所以绘图表面是由放在二维网格中的像素组成。
为了反映者一点,GDI+
坐标系用一些通过像素点的网格线表示,水平和垂直线按顺序编号,从0开始,向下向右逐步递增,下图显示了这些假想的网格线,其中方块表示像素。
1.绘制线条
使用:e.Grphics.DrawLine(Pens.Black,1,2,5,2)
绘制一个线段。起点是像素:(1,2)
,终点是像素:(5,2)
。
使用:e.Grphics.DrawLine(Pens.Black,1,1,4,4)
绘制一个对角线。
使用:e.Grphics.DrawRectangle(Pens.Black,1,0,,5,4)
绘制一个矩形。下面矩形的宽度是6个像素而不是5个像素,因为钢笔有一个限定宽度(1个像素),这个宽度不是无限小的。钢笔的宽度影响了绘制的线条的宽度。
2.填充矩形
在填充矩形的时候实际上是填充整个区域,而不只是绘制矩形的周长。使用e.Graphics.FillRectangle(Brushes.Black,1,0,5,4)
,填充一个矩形:其左上角是(1,0),宽度为5,高度为4。
图中黑色方块为绘制结果,宽度为5个像素,高度为4个像素。像素是可以处理的最小区域,要么填充整个区域,要么不填充区域。绘制是从像素的中心点开始,GDI+
填充结果为上图的红色方块。这里应用一个规则:如果请求的矩形要填充像素的右下限,就填充该像素的全区域,否则不填充,这样就产生上面的填充结果。
3.锯齿与反锯齿
锯齿效果是像素的粒子3化而造成的,在绘制一条对角线时,界面基于像素的本质只能是图形类似于对角线,得到一种阶梯状的效果。
在绘制曲线和文本时,也会出现这样的问题。这称为锯齿效果,因为屏幕上的像素是图形呈现出一种锯齿状的效果。
反锯齿用于使绘制曲线、对角线和文本这样的图像图形操作获得更好的效果。反锯齿功能需要对具有阶梯状效果的像素附近的像素修改颜色,这样会得到较平滑的效果,抵消了界面的光栅化本质所带来的不良效果。
e.Graphics.SmoothingMode=SmoothingMode.AntiAlias;
e.Graphics.FillRectangle(Brushes.Black,1,0,5,4);
4.坐标的数据类型
GDI+
为封装坐标信息,提供了许多数据类型以供使用。许多GDI+
绘图方法都把这些数据类型作为参数,其中一些数据类型是结构,一些是类。