How to draw something in DrawingVisual with millimeter unit instead of pixels?

时间:2015-06-15 14:53:27

标签: c# wpf printing drawingvisual

I'm trying to draw something in a System.Windows.Media.DrawingVisual but I need to draw thins in millimeter unit. How can I do that?

1 个答案:

答案 0 :(得分:1)

在WPF中,你甚至无法在没有至少一些额外努力的情况下以像素为单位绘制内容。 WPF使用“设备无关单元”,其中每个单位是1/96英寸。即使这仅仅是理论上的关系,因为它取决于显示设备正确地报告其分辨率,而显示设备又取决于显示器,其配置以及用户已设置的内容,例如在“大字体”设置中(即在屏幕分辨率设置中,单击“使文本和其他项目变大或变小”的链接)。

所有这些都会影响WPF对可用显示分辨率信息的解释,这反过来影响WPF选择如何呈现其“设备无关”1/96英寸单位。

最重要的是,Sheridan提供的链接评论者确实是最接近你以毫米为单位显示的,除非很多额外的工作和用户的帮助。通过按表达式提供的factor值(即96/ 25.4 ...)缩放输入单位(按毫米计),您可以看到25.4从毫米转换为英寸,然后{ {1}}将英寸转换为1/96英寸),您可以将毫米转换为WPF本机使用的96 dpi单位。

假设显示器配置正确(乐观的假设,但确实发生了:)),这将根据您所需的毫米尺寸在屏幕上显示相当准确的显示。


请注意,您可以通过在渲染的UI元素上使用变换来完成此缩放。最简单的方法是设置最外层容器对象的96属性,以便进行基于毫米的渲染。然后,您可以使用毫米的位置和大小值在该容器中布置对象,WPF将使用转换以您想要的比例显示容器和渲染的对象。