WPF学习01——分辨率的无关性

  理想情况下,应用程序应用更高的像素密度显示更多的细节:一个高分辨率的显示器可以显示相同大小的工具栏图标,但使用更多的像素显示更清晰的图形。

从而可以保持相同的基本布局但增加了清晰度和细节。WPF根据系统DPI设置进行缩放,而不是根据物理显示设备的DPI进行缩放来实现上述效果。

  WPF单位

  WPF使用设备无关单位(Device-Independent Unit)进行度量,一个设备无关单位被定义为1/96英寸。例如:使用WPF创建一个尺寸为96×96单位的按钮,如果使用标准的Windows DPI(96dpi)设置,

每个设备无关单位实际上对应一个物理像素。

  [物理单位尺寸]=[设备无关单位尺寸]×[系统DPI]

         =1/96英寸 × 96dpi

         = 1 像素

  本质上,WPF假定使用96个像素构成1英寸,因为这是Windows操作系统通过操作系统DPI设置告诉WPF的。

  系统DPI

  WPF本身支持系统DPI设置,例如:如果系统将DPI设置改为120dpi,WPF假定它需要120像素来填满1英寸的空间,WPF使用以下公式计算如何将逻辑单位转换为物理设备像素:

  [物理单位尺寸]=[设备无关单位]×[系统DPI]

         =1/96英寸 × 120dpi

         1.25像素

  换句话说,将系统DPI设置为120dpi时,WPF渲染引擎假定一个设备无关单位等于1.25个像素。

  位图和矢量图形

   如果准备在应用程序中包含图像,可能会出现问题。例如在传统的windows应用程序中,工具栏命令按钮使用非常小的位图,wpf应用程序中会根据系统DPI进行放大缩小时,位图

可能会出现伪影。所以,设计WPF用户界面时,即使是最小的图标,也通常使用矢量图形来实现。当然,相对于绘制一幅位图,绘制矢量图需要消耗更长的时间,但WPF包含减少开销的

优化措施,以确保性能处于合理的范围内。

posted @ 2012-10-26 22:19  sunnyboy  阅读(735)  评论(0编辑  收藏  举报