吐槽下 Mac 这个 HiDPI 高分屏缩放

您所在的位置:网站首页 4k缩放150和2k原生 吐槽下 Mac 这个 HiDPI 高分屏缩放

吐槽下 Mac 这个 HiDPI 高分屏缩放

2023-12-26 13:00| 来源: 网络整理| 查看: 265

站在码农的角度说一下,macOS 的缩放和 Windows 的缩放根本不是一个级别的东西,Linux 不了解不作评论。macOS:1. 使用 Point 表示屏幕坐标和长宽,可以用浮点值,和物理像素不对应;2. Windows Server 自动处理 Point 到 物理像素的对应关系,然后绘制到屏幕上;3. 不同的 DPI 之间的切换是自动的,比如一个窗口从 MacBook 移动到外接的 1080p 显示器上,系统会根据新的 DPI 重新绘制窗口。macOS 的程序其实不用关心具体 DPI 和分辨率,一切都是系统自己完成,包括:* 系统控件可以自动完成任意分辨率下面的适配;* 绘图 API 自动完成高分辨率的适配,还能自动利用更多的像素优化显示的内容;* 图片相关的 API 可以自动根据 DPI 读取不同分辨率的图片,在高分辨率下显示更清楚的图片;所以当年 iPhone 4 和 Retina Macbook 发布以后,旧的应用几乎不修改直接运行,在高分屏显示更好清晰的效果。

Windows:1. 使用 Pixel 表示屏幕大小和长宽,整数值,和物理像素对应;2. Windows 为了支持高分屏,加入了屏幕缩放 和 DPI 感知 (DPI Awareness),用户可以设置屏幕放大倍数,DPI 感知是指应用程序如何处理这个放大倍数,有以下几个值 /级别可以选择:* Unware:所有的旧应用,系统直接按倍数拉伸应用窗口,代价是显示模糊;* System:Vista 开始支持,应用程序按系统主显示器设置的倍数绘制窗口,单一显示器工作正常,多显示器如果 DPI 不一样会拉伸产生模糊* Per Monitor:Windows 8.1 开始支持,系统会通知应用程序不同显示器的放大倍数,应用程序就按照新的 DPI 重绘窗口,避免了拉伸的模糊,但不支持子窗口;* Per Monitor V2: Windows 10 开始支持,就是多了子窗口的支持;看起来到了 Windows 10 就和 macOS 差不多了,其实噩梦才刚刚开始,因为你的 UI 库不支持呀。原生的 Win32 控件,.net 的 WinForms 控件 和 WPF 控件,GDI 和 GDI+ ,都需要你修改布局代码适配,比如在 1 倍的时候,一个按钮长度 20 像素,在 1.5 倍的时候,你要通过计算得出现在这个按钮应该显示 30 像素,所有显示相关的代码全部都要改。这个过程太麻烦,连微软自己的都软件都适配不好,国内常用的软件比如 QQ ,百度网盘都是 System 级别,也就是单一显示器没问题,但多显示器就显示模糊了。微软也提供了一站式解决方案 UWP ,结果大家也都知道,挣扎了好久没人用放弃了。微软又搞出了 Windows App SDK ,有了 UWP 的先例都不敢用了。

总结一下,macOS 提供了对高分辨率的完整支持,Windows 把对高分辨率的适配工作交给了开发者。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3