本篇我们来学习WPF的绘图,在2D绘图中主要有这么几个重要的类:Drawing、Visual和Shape,顺便讲下Brush和BitmapEffect。
1.1Drawing类
Drawing类表示形状和路径的二维图,它继承自Animatable类,所以支持数据绑定、动画和资源引用等。它有这么几个子类:
- GeometryDrawing:包含Geometry、用于填充的Brush以及绘画轮廓的Pen(都是属性)
- ImageDrawing:包含ImageSource以及定义边界的Rect
- VideoDrawing:包含MediaPlayer以及定义边界的Rect
- GlyphRunDrawing:包含GlyphRun类、低级别的文本类以及用于绘制前景色的Brush
- DrawingGroup:包含一组Drawing对象的集合类
Drawing并不是UIElement,所以本身没有绘画的能力,如果将其设置为窗体或者内容控件的内容,将只是显示其ToString的结果,要想在呈现Drawing,可以将DrawingImage、DrawingBrush和DrawingVisual这三者对象作为宿主容器。
1.1.1GeometryDrawing
GeometryDrawing,顾名思义就是画几何图形的,这个功能是由Geometry类型属性提供的。Geometry类大的方向可分为Basic Geometry和Aggregate Geometry:
Basic Geometry基本几何体又可分为:
- RectangleGeometry:绘制矩形,包括定义尺寸的Rect属性以及分别定义圆角X轴和Y轴的RadiusX和RadiusY
- EllipseGeometry:绘制椭圆,包括定义圆心的Center属性以及分别定义圆角X轴和Y轴的RadiusX和RadiusY
- LineGeometry:绘制直线,包括起点StartPoint属性和终点EndPoint属性
- PathGeometry:绘制任何几何图形,包括描述轮廓的Figures(默认内容属性)和填充效果FillRule,该属性是一组PathFigure集合,而PathFigure又包含表示PathSegment(路径片段)集合的Segments。
PathSegment是一个抽象类,它有以下几个实现类:LineSegment(线段)、PolyLineSegment(线段集合)、ArcSegment(曲线段)、BezierSegment(三次贝塞尔)、PolyBezierSegment(三次贝塞尔集合)、 QuadraticBezierSegment(二次贝塞尔)和PolyQuadraticBezierSegment(二次贝塞尔集合)。
Aggregate Geometry聚合集合体又可分为:
GeometryGroup:顾名思义,有一个或者多个Geometry组成,本身是Geometry类型,通过Transform属性来表现复杂图形
CombinedGeometry:他不是一个通用的Geometry集合,它通过GeometryCombineModel枚举器来合并有且仅有的两个Geometry。
// 摘要: // 指定可用于合并两个几何图形的不同方法。 public enum GeometryCombineMode { // 摘要: // 通过采用两个区域的并集合并两个区域。 所生成的几何图形为几何图形 A + 几何图形 B。 Union = 0, // // 摘要: // 通过采用两个区域的交集合并两个区域。 新的区域由两个几何图形之间的重叠区域组成。 Intersect = 1, // // 摘要: // 将在第一个区域中但不在第二个区域中的区域与在第二个区域中但不在第一个区域中的区域进行合并。 新的区域由 (A-B) + (B-A) 组成,其中 A // 和 B 为几何图形。 Xor = 2, // // 摘要: // 从第一个区域中除去第二个区域。 如果给出两个几何图形 A 和 B,则从几何图形 A 的区域中除去几何图形 B 的区域,所产生的区域为 A-B。 Exclude = 3, }