sairen139 发表于 2019-8-5 08:15:22

关于苹果电脑的视网膜高分屏在pe下界面和字体过小的原因和不能自动拉伸高DPI解决方法

从显示屏EDID数据分析MacBookPro高分屏在Win10pe下不能自动拉伸高DPI的问题

红毛樱木Lv.9 管理员
49488 2018-11-17 13:30:15
这里用的是MacBookPro13,1解析,这个是2016年的13.3寸屏。
注:本文中所提到在代码,是PECMD2012的代码。
从win10的某个版本开始,可以默认高分辨屏自动适配DPI拉伸,好像是从14393开始(具体我记不清了),这里用16299解析。首先我们需要了解一个名词EDID
https://baike.baidu.com/item/EDID/980390
百度上这个说的不是太全,还有一个长度为256的版本。
从EDID中我们得到显示屏的物理尺寸,宽和高,从而可以得到显示屏的大小(我们通常说的多少寸显示器),进而算出显示屏的面板DPI,有的地方也称为PPI,我对这两个名词有点晕,此文中就称为面板DPI吧。
首先,我们要读取到显示屏的EDID数据,这里用到的方法是先获取显示屏的硬件实例ID信息,然后再去注册表中找,原理就用下面的代码演示。
DEVI listdev:&MonitorInfo *listdev=i *devid:"C:*PNP09FF"
REGI @HKLM\SYSTEM\CurrentControlSet\Enum\%&MonitorInfo%\Device Parameters\EDID,&MonitorInfoTemp
这里只有一个显示屏,所以不考虑多显示屏的情况。 %&MonitorInfoTemp%的数据就是当前显示屏的EDID数据。我这里获取到的数据如下
0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x06 0x10 0x34 0xA0 0x00 0x00 0x00 0x00 0x25 0x19 0x01 0x04 0xB5 0x42 0x29 0x78 0x02 0x0F 0xA1 0xAE 0x52 0x43 0xB0 0x26 0x0D 0x50 0x54 0x00 0x00 0x00 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0xD9 0x65 0x00 0x50 0xA0 0x40 0x2E 0x60 0x08 0x20 0x08 0x08 0x1E 0xB3 0x10 0x00 0x00 0x1A 0x7C 0x80 0x40 0x50 0xB0 0x08 0x34 0x70 0x08 0x20 0x68 0x08 0x1E 0xB3 0x10 0x00 0x00 0x1A 0x00 0x00 0x00 0xFC 0x00 0x43 0x6F 0x6C 0x6F 0x72 0x20 0x4C 0x43 0x44 0x0A 0x20 0x20 0x20 0x00 0x00 0x00 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xA3
显示屏的宽为21字节数据0x42,高为22字节数据0x29(我们按顺序数的话,应该是第22和第23个数据,这里是16进制数据换算成10进制就是66和41,注意这里的单位是厘米而不是英寸),然后我们要算显示屏的对角线长度,就是显示器的尺寸了。求一下66和41的弦长,然后再换算成英寸(1英寸=2.54厘米),得到最终的数据大概是30.6英寸。 哇靠,和实际的13.3英寸相差巨大,然后肯定得到的面板DPI值也是偏差很多。
我们算一下面板的DPI吧。
首先获取屏幕最大分辨率,代码如下:
DISP ?* &AllDisps
%&AllDisps%变量就是得到的数据如下:
2880      1800      32      64
得到最大分辨率为2880*1800 DPI的意思大概是,一英寸多少个像素点,我们常用对角线像素数除以显示屏英寸大小来表示面板DPI。这里其实就是求2880和1800的弦长,再除以30.6。最终我们计算得到的值为大概111。
到这里差不多可以看出真相了。
下面提供一个微软官方的默认缩放比例列表清单参考下:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/dn528846(v%3dwin.10)
丛这几个表里差不多就能知道为什么没有自动拉伸DPI了,因为这时候系统获取到的显示屏大小及面板DPI值不满足条件。
究竟是什么原因造成的数据不准,需要进一步研究。但是可以确定一点的就是,在USM全能版Win10pe中,我们启用显卡驱动支持并正确安装显卡驱动之后,这些数据都正常了。

以上技术层面上的分析,为什么要分析原因呢?因为USM新版可以很好的解决这个问题,我们纠正这个显示器尺寸错误的信息,并写个程序拉伸DPI即可。具体方法请随后留意后期的教程。

sairen139 发表于 2019-8-5 08:21:21

微软官方默认的缩放比例列表清单网址如下:

sairen139 发表于 2019-8-5 08:21:26

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/dn528846(v%3dwin.10)

995070995 发表于 2019-8-5 11:23:02

标题党,在850年前我已经就阅读过了,红大在1000年前就解决这个问题了,U盘魔术师已经是第6代了,难不成你想另起炉灶。

sairen139 发表于 2019-8-5 12:57:15

995070995 发表于 2019-8-5 11:23
标题党,在850年前我已经就阅读过了,红大在1000年前就解决这个问题了,U盘魔术师已经是第6代了,难不成你 ...

我也是找解决方法的才找到的红毛樱木的帖子

995070995 发表于 2019-8-5 13:24:01

sairen139 发表于 2019-8-5 12:57
我也是找解决方法的才找到的红毛樱木的帖子

同病相怜啊!
页: [1]
查看完整版本: 关于苹果电脑的视网膜高分屏在pe下界面和字体过小的原因和不能自动拉伸高DPI解决方法