C# WPF像素到桌面像素

C# WPF像素到桌面像素,c#,wpf,pixel,C#,Wpf,Pixel,在过去,我曾被联系到回答一个类似的问题,即如何将WPF像素坐标转换为桌面坐标,但我不确定我是否理解其中涉及的数学知识 惊奇的回答是“每WPF单元的像素数=恒定的WPF单元大小*监控DPI;”以及“恒定的WPF单元大小为1/96。” 在我的例子中,我从一个图形对象中获取了DPI,该图形对象是从位图对象(因为我找不到惊奇提到的属性)中创建的,该位图对象是我在拍摄桌面截图后创建的,因此我: Graphics g = Graphics.FromImage(bitmap); float WpfUnit =

在过去,我曾被联系到回答一个类似的问题,即如何将WPF像素坐标转换为桌面坐标,但我不确定我是否理解其中涉及的数学知识

惊奇的回答是“每WPF单元的像素数=恒定的WPF单元大小*监控DPI;”以及“恒定的WPF单元大小为1/96。”

在我的例子中,我从一个图形对象中获取了DPI,该图形对象是从位图对象(因为我找不到惊奇提到的属性)中创建的,该位图对象是我在拍摄桌面截图后创建的,因此我:

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像素转换为桌面像素。在此方面的任何帮助都将不胜感激。

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

内置和方法如何?还是我遗漏了什么?

我已经看过这两种方法,但它们使用System.Windows.Point,而不是创建矩形对象所需的System.Drawing.Point:(您始终可以使用适配器模式创建从一种类型到另一种类型的包装器。请参阅en.wikipedia.org/wiki/Adapter_Pattern再次感谢!我真的没有想过在这两者之间手动转换:(当您没有任何窗口时,您不能使用此方法。有关更灵活的缩放,请参阅:代码包括用于缩放的类。)。