C#中使用GDI+,一种图形设备接口用来对绘图操作进行处理。GDI+可以对二维矢量图形,图像,文字显示提供相关的类给编程人员使用。具体一点讲,对二维矢量图形提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类;对图像的处理提供了Bitmap,Image等类来显示操作保存不同格式的图像;GDI+支持各种字体字号样式显示文本。
GDI+用Graphics类来实例化建立画布框架,一般情况下创建Graphics实例对象可在窗体Paint事件响应方法中或者重载控件窗体方法中;再要么调用控件或者窗体CreateGraphics方法来调用对象,调用Graphics类的FormImage静态方法;
在绘画过程中经常会用到的对象总体有六种:Pen类主要用来绘制线的宽度样式;Color对颜色的定义,除开基本颜色还可以自定义颜色;Brush一个从抽象的画刷基类,无法实例化; Rectangle结构一般放四个整数来设计矩形的大小位置(下面案例演示了绘制渐变矩形的代码效果);Point来描述某点具体的水平位置,数值位置;Font一看就知道是对文本字体属性样式进行定义的文本类(使用方法也很简单)。
用Pen和Rectangle结构来绘制位置大小,调用Graphics类DrawArc方法绘制指定的弧线。提到弧线就会有直线的绘制,当然需要用Point结构确定两点,然后调用Graphics类DrawLine方法绘制直线。DrawArc绘制的弧线可以看作是椭圆中指定的一部分,那当然可用弧线差不多的代码来绘制一个椭圆,不同的只是最后调用的是Graphics类DrawEllipse方法。
抽象的Brush类画刷可衍生系列派生类。比如HatchBrush阴影画刷、SolidBrush单色画刷和TextureBrush纹理画刷,还有一种包含有线性画刷LinearGradientBrush和路径画刷PathGradientBrush的渐变画刷。SolidBrush单色画刷类似于画画工具中填充颜色的油漆桶,填充时只能使用一种颜色去进行填充;HatchBrush阴影画刷包括定义线条颜色的前景色、定义各线条间隙颜色的背景色以及6中阴影。HatchBrush对象中HatchStyle来定义阴影画刷的不同图案。TextureBrush纹理画刷,它本身拥有图案,一般使用它填充封闭式图形,而且填充你给完毕要将处理后的图案存为图片文件格式。渐变画刷使用两种颜色;它的主要特点是:在使用过程中,一种颜色在一端,而另外一种颜色在另一端,在中间,两种颜色融合产生过渡或衰减的效果。LinearGradientBrush可以显示线性渐变效果public LinearGradientBrush(Point point1,Point point2,Color color1,Color color2)括号参数分别代表渐变色参数起始Point点结构和Color颜色结构。而PathGradientBrush是路径渐变的可以显示比较具有弹性的渐变效果public PathGradientBrush (GraphicsPath path);参数被定义此PathGradientBrush填充的区域。
上述通过C#后台代码进行绘图操作,在XAML中,对这些形状的绘制也有具体操作元素Shapes类。Shap包括最常用的绘图对象,Line直线(在定义的(x1,y1)和(x2,y2)间连成一线)、Rectangle矩形(设置宽高绘制矩形)、Ellipse椭圆、Polygon多边形(由多个Points属性的点对象定义)、Path路径(路径标记语言定义图形)。
Shapes元素绘制的是简单的平面形状图案,XAML中在对几何图形绘制是,使用Geometry元素。它的元素类似Shapes形状,比如LineGeometry,EllipsGeometry和RectangleGeometry。形状可独立存在,绘制的图形能在画板上显示。几何图形需要依附某一对象元素存在且不能够直接呈现在画布上。
上示例中最后一个是由路径几何对象PathGeometry来绘制的直线,当然PathGeometry也可以使用段来绘图,可用BezierSegment和LineSegment来几点分布的一个区间内绘制曲线(曲线又叫做贝塞尔曲线),还可以使用ArcSegment在两点间绘制椭圆弧。路劲标记语法中允许使用命令,与Path类的属性Data一起使用。比如常用到的标记,上面的演示案例也有。M标记起点,L指定点的线条命令,Z闭合图形的闭合命令,水平线H,V标记垂直线,三次贝塞尔曲线C,二次贝塞尔曲线Q,光滑三次贝塞尔曲线S,光滑二次贝塞尔曲线T,椭圆弧A
XAML画笔也有很多种类,一般都用在设置Background子元素把画笔元素添加到背景内容中,SolidColorBrush和C#中一样,纯色画笔,全部区域使用同一种演示绘制,LinearGradienBrush线性渐变用的很多,通过StarPoint和EndPoint两个属性来定义渐变方向,比如(0,0)-(1,1)默认渐变方向为对角线、(0,0)-(0,1)垂直渐变、(0,0)-(1,0)水平渐变。颜色设置我们使用GradientStop元素。
ImageBrush把图片加载到画笔元素中。RadialGradientBrush也是一种渐变效果的画笔,通过放射的形式是颜色发生渐变。DrawingBrush用画笔绘制的图形。