博客
关于我
精通C#---WPF图形呈现服务
阅读量:734 次
发布时间:2019-03-21

本文共 1836 字,大约阅读时间需要 6 分钟。

WPF(Windows Presentation Framework,Windows展示框架)是用于开发Windows基于定位的应用程序的强大工具。它采用保留模式图形,即便图形被隐藏,它们仍然存在于内存中。这使得WPF在处理图形数据时更加高效和灵活。

1. WPF图形呈现方式

WPF提供了多种形状呈现选项:

  • 形状:适合交互式图形,如System.Windows.Shapes.Shape
  • 绘图和几何图形:适合非交互,矢量化的图形,如System.Windows.Media.Drawing
  • 可视化:适合大量复杂图形,如System.Windows.Media.Visual

2. 使用形状呈现图形

在WPF中,Shape controls(如Ellipse、Rectangle和Line等)是绘图的基础。开发者可以通过设置ShapeDefiningGeometryStretchStroke等属性来定制形状的外观和行为。

3. Path

Path在WPF中是用来绘制矢量图形的核心元素,可通过Geometry集合呈现复杂图形。Geometry派生类(如LineGeometryEllipseGeometry等)可以单独表示图形片段。需要注意的是,Path并不只是用于矢量图形,还可以结合GeometryGroup来实现更复杂的图形组合。

4. 画刷与画笔

WPF提供了多种画刷类型:

  • DrawingBrush:适用于基于GeometryDrawing的绘图。
  • ImageBrush:使用图像文件进行图形填充。
  • GradientBrush:包括LinearGradientBrushRadialGradientBrush,用于渐变填充。
  • VisualBrush:绘制基于Visual对象的复杂图形。

通过设置StrokeThicknessLineJoinLineCap等属性,可以自定义画笔的外观,例如设定笔尖类型和线条连接方式。

5. 图形变换

WPF支持多种图形变换方法:

  • 矩阵变换(MatrixTransform):用于对2D平面进行缩放、旋转和平移。
  • 旋转和缩放(RotateTransform、ScaleTransform):分别用于围绕指定点进行旋转和缩放。
  • 扭曲(SkewTransform):改变坐标系的形状。
  • 翻转和平移(TransformGroup):将多个变换组合在一起应用。

变换可以在布局管理之前(LayoutTransform)或之后(RenderTransform)应用。

6. 绘图与几何图形

WPF提供了丰富的绘图选项,尤其是Drawing类。

  • GeometryDrawing:用于轻量级现象图形呈现。
  • GlyphRunDrawing:用于显示文本图形。
  • ImageDrawing:用于在矩形范围内呈现图像或图形集合。
  • VideoDrawing:支持播放音频或视频内容。

需要注意的是,Drawing对象不继承UIElement,因此它们不能直接作为UI元素呈现,除非通过DrawingVisualDrawingImage等容器进行显示。

7. DrawingBrush

DrawingBrush是WPF中常用的绘图和图形填充工具。通过设置DrawingGeometryPenBrush属性,可以创建富士桉树的可见图形。例如,以下XAML代码展示了一个带渐变填充的椭圆:

...

8. 可视化层呈现

为了实现高度自定义的可视化呈现,WPF提供了Visual类及其派生类,如DrawingVisualViewport3DVisualContainerVisual。这些类允许开发者在完全由代码控制的视觉层中呈现图形,适用于高性能和高度定制化的应用场景。

9. DrawingVisual

使用DrawingVisual进行图形呈现是一个高效的做法。通过获取DrawingContext,开发者可以直接在视觉层中绘制图形数据。重要的是需要重写FrameworkElement的虚方法,确保容器能够正确解析和呈现自定义图形。

通过以上方法,开发者可以充分利用WPF的强大功能来实现高效、灵活的图形呈现,满足各种应用需求。

转载地址:http://ngmgz.baihongyu.com/

你可能感兴趣的文章
mysql 表的操作
查看>>
mysql 视图,视图更新删除
查看>>
MySQL 触发器
查看>>
mysql 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>
MySQL 证明为什么用limit时,offset很大会影响性能
查看>>
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
MySQL 错误
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySql-2019-4-21-复习
查看>>
mysql-connector-java各种版本下载地址
查看>>