WPF像素到桌面像素

4 c# wpf pixel

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

令人惊讶的回答是"每个WPF单位的像素= ConstantWPFUnit size*监视DPI;" 并且"持续的WPF单位大小是1/96."

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

Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;
Run Code Online (Sandbox Code Playgroud)

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

WpfUnit = (1 / 96) * 96 = 1
Run Code Online (Sandbox Code Playgroud)

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

if(WpfUnit == 0) WpfUnit = 1;
Run Code Online (Sandbox Code Playgroud)

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

因此,总的来说,我仍然坚持将WPF像素转换为桌面像素.任何有关这方面的帮助将不胜感激.

Pau*_*ier 6

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