Foxtable(狐表)用户栏目专家坐堂 → 操作系统什么地方看的到显示器的点距(或显示器实际大小)?


  共有10654人关注过本帖树形打印复制链接

主题:操作系统什么地方看的到显示器的点距(或显示器实际大小)?

帅哥哟,离线,有人找我吗?
Fotable
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
  发帖心情 Post By:2012/10/31 11:20:00 [只看该作者]

找了点相关资料给大家分享

最近要做一个所见即所得的图形编辑器,遇到了一个问题:如果以像素为单位在屏幕上画了一条直线后,那么如何知道它在屏幕上的物理长度?例如,假设我们在vc6中用向导新建一个简单的单文档程序PixerToInch,在它的ondraw函数中有如下代码:

[cpp:nogutter] view plaincopyprint?
  1. void CPixerToInchView::OnDraw(CDC* pDC)  
  2. {  
  3.     CPixerToInchDoc* pDoc = GetDocument();  
  4.     ASSERT_VALID(pDoc);  
  5.   
  6.     // TODO: add draw code for native data here   
  7.         //画一条96像素长的横线   
  8.     pDC->MoveTo(100,100);  
  9.     pDC->LineTo(196,100);  
  10.           
  11.         //画一条96像素长的竖线线   
  12.     pDC->MoveTo(100,100);  
  13.     pDC->LineTo(100,196);  
  14. }  

那么在我的aoc915sw显示器的屏幕上,实际测量的结果为水平线实际长度为接近31毫米,竖线的长度为大约为接近33毫米,为什么会出现这个结果呢?我查了很多资料,发现许多资料讲都是用dpi计算,但结果与我的实际不符,后经与网友七叶讨论,终于找到了正确的计算方式,现整理如下,以供后来者参考。

为了计算屏幕上的显示长度,需要知道如下几个参数

1、显示器的最大分辨率。显示器的最大分辨率可以去查该型号显示器的技术手册,例如对我的aocsw915显示器,其最大分辨率为1440*900。注意:要把显示器的最大分辨率和显卡的最大分辨率区别开来,在桌面上右键点"属性"->设置里看到的最大分辨率有可能是显卡的最大分辨率,比如我机器上的显卡型号为Intel 82945G Express Chipset ,它的最大分辨率是2048*1536。

      如果想直接查看显示器的最大分辨率,方法如下,在"属性"->"设置"里点"高级"->"监视器",选中"隐藏该显示器无法显示的模式",点确定后回到前面的对话框,此时看到的最大分辨率就是显示器的最大分辨率了。

2、windows系统的实际分辨率,即桌面上右键点"属性"->设置里的屏幕分辨率的值,我的是1280*768

3、显示器的点距,这个也需要查显示器的技术参数,aocsw915的点距为0.285mm

有了上面几个个参数之后,我们就可以计算出某个方向上的直线的实际长度了

公式为

屏幕长度(单位为毫米)=像素长度*最大分辩率*点距/当前分辨率 

例如对我的代码,屏幕上横线的长度为

96*0.285*1440/1280 = 30.78mm

竖线的屏幕长度为

96*0.285*900/768= 32.0625mm

和我的实际测量结果吻合。

小结:将像素长度乘当前的点距即可求出屏幕的实际长度,但是显示器标出的点距是在最大分辩率下的点距(此时也称显示器处于点对点模式)此时点距最小,当分辩率不是最大时,相当于把点距拉长了,此时的点距要考虑一个换算系数,即最大分辨率/当前分辨率,因此最后的公式为

像素数量*(最小点距*最大分辨率/实际分辩率)

[此贴子已经被作者于2012-10-31 11:20:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Fotable
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
  发帖心情 Post By:2012/11/1 13:43:00 [只看该作者]

顶顶


 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  13楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2012/11/1 21:39:00 [只看该作者]

谢分享!

 回到顶部
帅哥哟,离线,有人找我吗?
freedust
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:30 积分:391 威望:0 精华:0 注册:2011/12/31 12:52:00
  发帖心情 Post By:2012/11/1 22:13:00 [只看该作者]

缇(Twips) (缇:计量单位,等于“磅”的 1/20,英寸的 1/1,440。一厘米有 567 缇。
像素(Pixels):监视器或打印机分辨率的最小单位 

右键单击桌面,选择属性,选择“设置”选卡,单击高级按钮。
里面出现DPI设置。一般为“正常尺寸(96 DPI)”。
DPI的意思就是 DPI (Dots per Inch)。因此我们可以得到如下换算公式
1 Pixel = 1440 TPI / 96 DPI = 15 Twips
1 Twip = 96 DPI / 1440 TPI = 0.0666667 Pixels


这里顺便说一下 ACCESS 中的其他几个单位的转换关系 


磅:指打印的字符的高度的度量单位。1 磅等于 1/72 英寸,或大约等于 1 厘米的 1/28。
英寸:2.54 厘米
 
一般情况下:1厘米=8505像素。不知道这个答案你需要不需要。我很久之前也遇到这个问题。但解决方法和你的不一样。
[此贴子已经被作者于2012-11-1 22:15:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Fotable
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
  发帖心情 Post By:2012/11/1 22:19:00 [只看该作者]

以下是引用freedust在2012-11-1 22:13:00的发言:
缇(Twips) (缇:计量单位,等于“磅”的 1/20,英寸的 1/1,440。一厘米有 567 缇。
像素(Pixels):监视器或打印机分辨率的最小单位 

右键单击桌面,选择属性,选择“设置”选卡,单击高级按钮。
里面出现DPI设置。一般为“正常尺寸(96 DPI)”。
DPI的意思就是 DPI (Dots per Inch)。因此我们可以得到如下换算公式
1 Pixel = 1440 TPI / 96 DPI = 15 Twips
1 Twip = 96 DPI / 1440 TPI = 0.0666667 Pixels


这里顺便说一下 ACCESS 中的其他几个单位的转换关系 


磅:指打印的字符的高度的度量单位。1 磅等于 1/72 英寸,或大约等于 1 厘米的 1/28。
英寸:2.54 厘米
 
一般情况下:1厘米=8505像素。不知道这个答案你需要不需要。我很久之前也遇到这个问题。但解决方法和你的不一样。
[此贴子已经被作者于2012-11-1 22:15:54编辑过]
你用的什么方法

 回到顶部
总数 15 上一页 1 2