由于现代 macOS 设备默认选择使用缩放后的 HiDPI 分辨率,位图图像在屏幕上变得模糊。有没有办法将位图逐像素渲染到显示屏的真实 native 物理像素?任何 CoreGraphics、OpenGL 或 Metal API 都可以在不改变屏幕显示模式的情况下实现这一点?
如果您正在考虑那些 convertXXXXToBacking
和 friend ,请停下来。这是给你的解释。 MacBook Pro 中的典型 13 现在具有 2560x1600 像素分辨率。全新安装 macOS 后,默认建议的屏幕分辨率为 1440x900。用户可以通过系统偏好设置将其更改为 1680x1050。在 1440x900 或 1680x1050 的情况下,backingScaleFactor 恰好为 2。典型的渲染路线将首先将任何内容渲染为非物理 2880x1800 或 3360x2100 分辨率,并且操作系统/GPU 使用未知方法进行最终的重采样。
最佳答案
你最好的选择可能是 Metal 。 MTKView
的 drawableSize
声称默认值是 View 的“以 native 像素为单位”的大小。我不确定这是否意味着设备像素或后备存储像素。如果是后者,您可以关闭 autoResizeDrawable
并直接设置 drawableSize
。
要获取显示器的物理像素数,您可以使用我的答案here .
您还可以尝试使用 Core Graphics,并将该尺寸的 CGImage 绘制到后备存储像素中屏幕尺寸的矩形上。所有缩放可能会在内部被取消。
关于macos - 如何将位图纹理的每个像素渲染到 macOS 上屏幕的每个 native 物理像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551692/