WPF像素到桌面像素

我之前已经将这个问题转换为关于将WPF像素坐标转换为桌面坐标的类似问题,但是我不确定我是否理解所涉及的数学。

令人惊讶的回答是“每个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像素转换为桌面像素。 任何有关这方面的帮助将不胜感激。

内置的PointToScreen和PointFromScreen方法怎么样? 或者我错过了什么?

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