我在过去曾联系过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像素转换为桌面像素。对此的任何帮助将不胜感激。
答案 0 :(得分:6)
WpfUnit是零,因为它用1/96进行整数运算。明确地将这些数字声明为浮点数。
答案 1 :(得分:2)
如何内置PointToScreen和PointFromScreen方法?或者我错过了什么?