将 dpi/dots 转换为像素给出错误的结果
Transform dpi/dots to pixel gives wrong result
目前我正在开发一个小型打印机预览,但是我在将每毫米/dpi 的点数转换为屏幕上的像素时遇到了一些问题。
例如,我有一个 Label
,它具有坐标:
顶部 = 5 个点
左 = 20 点
打印机的分辨率为每毫米 8 点/203 dpi。
在我的简单 wpf 应用程序中,我有一个 canvas,我想在那个地方放置一个标签,它将被打印出来。所以我需要转换值 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。
目前我正在开发一个小型打印机预览,但是我在将每毫米/dpi 的点数转换为屏幕上的像素时遇到了一些问题。
例如,我有一个 Label
,它具有坐标:
顶部 = 5 个点
左 = 20 点
打印机的分辨率为每毫米 8 点/203 dpi。
在我的简单 wpf 应用程序中,我有一个 canvas,我想在那个地方放置一个标签,它将被打印出来。所以我需要转换值 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。