屏幕长度与像素长度的转换

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

那么在我的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

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

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值