屏幕长度与像素长度的转换
来源:互联网 发布:阿里云部署nodejs项目 编辑:程序博客网 时间:2024/04/29 07:22
最近要做一个所见即所得的图形编辑器,遇到了一个问题:如果以像素为单位在屏幕上画了一条直线后,那么如何知道它在屏幕上的物理长度?例如,假设我们在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
和我的实际测量结果吻合。
小结:将像素长度乘当前的点距即可求出屏幕的实际长度,但是显示器标出的点距是在最大分辩率下的点距(此时也称显示器处于点对点模式)此时点距最小,当分辩率不是最大时,相当于把点距拉长了,此时的点距要考虑一个换算系数,即最大分辨率/当前分辨率,因此最后的公式为
像素长度*(最小点距*最大分辨率/实际分辩率)
- 屏幕长度与像素长度的转换
- CDC::GetDeviceCaps()物理长度与屏幕像素间的转换
- CDC::GetDeviceCaps()物理长度与屏幕像素间的转换
- CDC::GetDeviceCaps()物理长度与屏幕像素间的转换
- CDC::GetDeviceCaps()物理长度与屏幕像素间的转换
- OPENGL_单位长度对应屏幕像素
- 像素真实的物理长度
- 获取字符串的像素长度
- 获取字符串的像素长度
- Unity中关于单位像素与单位长度的关系
- Android 计算字符串在屏幕上所占的长度和宽度(像素单位)
- Android获取屏幕宽度与长度的三个方法
- Android获取屏幕宽度与长度的四个方法
- Android获取屏幕宽度与长度的三个…
- 计算字符串的空间长度(像素)
- 多种获取字符串像素长度的方法
- swing获取固定像素长度的字符串
- css长度单位的转换
- 烽驿2009开源实时通信平台
- struts实现文件上传程序
- 实现文件下载
- 传智播客jpa学习,jpa整合hibernate
- session
- 屏幕长度与像素长度的转换
- 如何使用axis为你的项目加入webservice
- 软件测试“最佳学习”方法?
- dll 相关文章
- 我的青春谁做主的主题曲--只为了你
- CRect类
- Struts自定义重定向
- JDK1.5中的一例策略模式
- Temporary Post Used For Theme Detection (20ffb75b-2fa7-4a9a-b9c9-03f6d662a8de - 3bfe001a-32de-4114-a6b4-4005b770f6d7)