WPF像素到桌面像素

时间:2009-07-27 17:02:38

标签: c# wpf pixel

我在过去曾联系过this回复关于将WPF像素坐标转换为桌面坐标的类似问题,但我不确定我是否理解所涉及的数学。

Astonish'回答说“每个WPF单位的像素= ConstantWPFUnit size *监视DPI;”并且“常量WPF单位大小为1/96。”

在我的情况下,我从一个图形对象中获取了DPI,该图形对象是从我在桌面截图后创建的位图对象(因为我找不到Astonish所说的属性)创建的,所以我有:

Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;

鉴于从图形对象返回的DPI是96,我留下了

WpfUnit = (1 / 96) * 96 = 1

然而,WpfUnit因某些未知(对我而言)的原因而出现0。我能看到解决这个问题的唯一方法就是说

if(WpfUnit == 0) WpfUnit = 1;

即使这并没有真正解决这个问题,因为高度值和最高值乘以链接答案中建议的WpfUnit,除了乘以1之外没有对它们做任何事情。

因此,总而言之,我仍然坚持将WPF像素转换为桌面像素。对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

WpfUnit是零,因为它用1/96进行整数运算。明确地将这些数字声明为浮点数。

答案 1 :(得分:2)

如何内置PointToScreenPointFromScreen方法?或者我错过了什么?