屏幕显示DPI研究实验

风之子赛拉飞尔 2014-11-26 11:54:26
屏幕HDC用::GetDC(NULL)或是CreateDC("DISPLAY", NULL, NULL, NULL)得到,对以下问题没有区别。

Ⅰ、术语:
>> 分辨率(resolutioin):单位为像素(px),是逻辑参数
>> 尺寸(size):单位为毫米(mm),是物理参数
>> DPI:单位为点/英寸(inch)
>> 换算:1 inch = 25.4 mm

Ⅱ、实验方法:
1、使用GDI中的GetDeviceCaps方法获取屏幕参数、计算
2、使用直尺(不锈钢制)或一张A4打印纸进行测量、计算

Ⅲ、实验条件:

1、屏幕分辨率设为最高分辨率
(XP:“显示属性|设置|屏幕分辨率”
Win7:“屏幕分辨率|分辨率”)

2、DPI设置为正常值
(XP:“显示属性|设置|高级|常规|DPI设置”,选96DPI
Win7:“屏幕分辨率|放大或缩小文本和其它项目”,选100%)

Ⅳ、实验步骤:
1、HORZRES=水平分辨率(记为“分辨率”)
2、HORZSIZE=水平尺寸(记为“尺寸”)
3、(HORZRES / HORZSIZE) * 25.4=计算DPI
4、LOGPIXELSX=逻辑DPI
5、编写一个绘图测试程序,绘制长度为210mm(A4纸宽度)的水平直线,
调整DPI值,使屏幕显示长度与直尺刻度(或A4打印纸宽度)吻合,得出实测DPI

Ⅴ、实验记录:

分辨率(px) 尺寸(mm) 计算DPI 逻辑DPI 实测DPI
惠普15″笔记本 1280 451 72 96 107
戴尔15″笔记本 1366 482 72 96 112
戴尔17″台式机 1366 320 108 96 84.5

Ⅵ、笔记本和台式机显示器对比

1、DPI设置只影响LOGPIXELSX,反之LOGPIXELSX只受DPi设置影响,这一点两者相同

2、修改(降低)分辨率:
笔记本显示器:同时影响HORZRES和HORZSIZE,计算DPI不变(视觉效果是屏幕显示区域缩窄,但像素还是有所增大)
台式机显示器:只影响HORZRES,计算DPI变化(视觉效果是像素增大,屏幕显示区域不变)
共性:不影响LOGPIXELSX,逻辑DPI不变
...全文
363 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
当然已经实现咯 上面 过程都已经描述清楚了哈,代码就不剧透了吧,请允许我保留一点神秘感吧
shiter 2014-11-28
  • 打赏
  • 举报
回复
请问实现了嘎啥,贴上了看看哇
hushoubo 2014-11-26
  • 打赏
  • 举报
回复
lz有才.....
  • 打赏
  • 举报
回复
继续研究的结果: 1、GetMonitorDisplayAreaSize方法疑似可以获取屏幕实际尺寸,但其需传入显示器物理句柄, 这一句柄的获取方法GetPhysicalMonitorsFromHMONITOR返回的物理句柄总是为空,根据MSDN描述, 判断是笔记本显示器不支持DDC/CI方法。(未在台式机做测试。) 2、查询资料得知可以从显示设备EDID信息中提取显示尺寸。 经查VideoPortDDCMonitorHelper可获取EDID信息,但这个属于驱动层方法,不得其使用要领。 3、找到方法,通过EnumDisplayDevices获取DeviceID,根据其中的信息匹配注册表中的设备EDID主键, 获取EDID,再解析提取显示尺寸。 参考1:https://social.msdn.microsoft.com/Forums/zh-CN/d940a189-58e8-48e5-a3f0-0ca0f66f1cb1/howto-get-handle-of-a-display-device-from-displaydevicedevicename 参考2:http://blog.csdn.net/xuxinhua/article/details/6538095 参考3:http://download.csdn.net/download/u012709815/6800067 4、手动解析了下,取出的尺寸数值与通过实测DPI反算的尺寸数值基本吻合。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧