过去我曾被链接到类似问题的回答(这里),该回答讲解了如何将WPF像素坐标转换为桌面坐标,但我不太理解所涉及的数学运算。
Astonish的回答指出,“每个WPF单位的像素数=ConstantWPFUnit大小×显示器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像素转换为桌面像素。非常感谢您提供任何帮助。