WPF绘图与Win32的不同

可视化对象的呈现行为

 

WPF 引进了几个影响可视化对象呈现行为的功能:保留的模式图形、矢量图形和与设备无关的图形。      

了解即时模式保留模式图形系统之间的区别是了解 Visual 对象角色的要点之一。  基于 GDI 或 GDI+ 的标准 Win32 应用程序使用即时模式图形系统。  这意味着应用程序负责重新绘制工作区中由于某项操作(如调整窗口大小)或者对象的可视化外观发生变化而失效的部分。 

Win32 呈现序列示意图

Win32 呈现顺序的关系图

与之相比,WPF 使用保留模式系统。  这意味着具有可视化外观的应用程序对象定义一组序列化绘图数据。  在定义了绘图数据之后,系统会响应所有的重新绘制请求来呈现应用程序对象。  甚至在运行时,您也可以修改或创建应用程序对象,并仍旧依赖系统响应绘制请求。  保留模式图形系统中有一个强大功能,那就是绘图信息总是由应用程序保持为序列化状态,但是呈现功能仍由系统负责。  下面的关系图演示应用程序如何依赖 WPF 来响应绘制请求。 

WPF 呈现序列示意图

WPF 呈现顺序的关系图

使用保留模型图形的最大好处之一就是,WPF 可以高效率地优化需要在应用程序中重绘的内容。  即使您有一个具有各种不透明度的复杂场景,通常也不必编写特殊用途的代码来优化重绘功能。  请将智能重绘功能与 Win32 编程进行比较,在后者中,可以通过最小化更新区域中的重绘量来尽力优化应用程序。  有关在 Win32 应用程序中优化重绘功能时涉及到的复杂度类型的示例,请参见在更新区域中重绘。 

WPF 使用向量图形作为其呈现数据的格式。  向量图形(包括可缩放的向量图形 (SVG)、Windows 元文件 (.wmf) 和 TrueType 字体)存储呈现数据,并以指令列表的形式传输该呈现数据,这些指令描述如何使用图形基元来重新创建图像。  例如,TrueType 字体是描述一组直线、曲线和命令(而不是像素数组)的矢量字。  矢量图形的主要好处之一就是能够伸缩到任何大小和分辨率。 

与矢量图形不同,位图图形以图像的逐像素表示形式来存储呈现数据,而且在特定的分辨率下预先呈现。  位图图形格式和矢量图形格式的主要区别之一就是对原始图像的保真度。  例如,当某个源图像的大小发生变化时,位图图形系统会拉伸该图像,而向量图形系统会伸缩该图像,从而保持图像的保真度。 

下图显示了源图像在放大到 3 倍时的情况。  请注意,当源图像作为位图图形拉伸时会发生失真,而当源图像作为矢量图形伸缩时,则不会发生失真。 

光栅图与矢量图之间的区别

光栅图形和矢量图形之间的区别

下面的标记显示所定义的两个 Path 元素。  第二个元素使用 ScaleTransform 将第一个元素的绘图指令放大到 3 倍。  请注意 Path 元素中的绘图指令保持不变。 

<Path
  Data="M10,100 C 60,0 100,200 150,100 z"
  Fill="{StaticResource linearGradientBackground}"
  Stroke="Black"
  StrokeThickness="2" />

<Path
  Data="M10,100 C 60,0 100,200 150,100 z"
  Fill="{StaticResource linearGradientBackground}"
  Stroke="Black"
  StrokeThickness="2" >
  <Path.RenderTransform>
    <ScaleTransform ScaleX="3.0" ScaleY="3.0" />
  </Path.RenderTransform>
</Path>
posted @ 2017-03-28 14:47  高_山_流_水  阅读(354)  评论(0)    收藏  举报