C# 将dpi/点转换为像素会产生错误的结果

C# 将dpi/点转换为像素会产生错误的结果,c#,wpf,printing,resolution,dpi,C#,Wpf,Printing,Resolution,Dpi,目前,我正在开发一个小型打印机预览,但我在将每毫米/分点数转换为屏幕上的像素时遇到了一些问题 例如,我有一个标签,它具有以下坐标: 顶部=5点 左=20点 打印机的分辨率为每毫米8点/203 dpi 在我的简单wpf应用程序中,我有一个画布,我想在画布上放置一个标签,在那里它将被打印。因此,我需要相对于屏幕上的分辨率转换值20和5。但是像素的结果是错误的。这是我的计算: // start values double top = 5; double left = 20; // let's try

目前,我正在开发一个小型打印机预览,但我在将每毫米/分点数转换为屏幕上的像素时遇到了一些问题

例如,我有一个
标签
,它具有以下坐标: 顶部=5点 左=20点

打印机的分辨率为每毫米8点/203 dpi

在我的简单wpf应用程序中,我有一个画布,我想在画布上放置一个标签,在那里它将被打印。因此,我需要相对于屏幕上的分辨率转换值
20
5
。但是像素的结果是错误的。这是我的计算:

// start values
double top = 5;
double left = 20;

// let's try to calculate the mm. We use 8, because we have 8mm per dot
double mmtop = top / 8.0;
double mmleft = left / 8.0;

// let's turn mm to cm
double cmtop = mmtop * 10.0;
double cmleft = mmleft * 10.0;

// Lets calulate the pixels on the base of a 72dpi monitor
double dpitop = cmtop / 25.4 * 72.0;   // = 318.89
double dpileft = cmleft / 25.4 * 72.0; // = 17.71
这就是我试图计算基于像素的位置的方法。我做错了什么


也许我犯了一些很容易的错误,谢谢

要将毫米转换为厘米,你需要除以10,而不是乘以10。

一英寸中没有25.4厘米。一英寸有2.54厘米,所以你的
dpitop
dpileft
变量的值可能不正确?哦,这太尴尬了。非常感谢你。我会测试每件事。就这样,我没话可说……:)@Sheridan关于dpi转换的说法也是正确的。。。您需要同时更改这两个选项才能使其正常工作。祝你好运是的,非常感谢。现在它似乎起作用了。对不起,这些错误打扰了你。