2

由于现代 macOS 设备默认选择使用缩放的 HiDPI 分辨率,因此位图图像在屏幕上变得模糊。有没有办法将位图逐个像素地渲染为显示屏的真正本机物理像素?是否有任何 CoreGraphics、OpenGL 或金属 API 可以在不改变屏幕显示模式的情况下实现这一点?

如果您正在考虑那些convertXXXXToBacking和朋友,请停止。这是为您解释。MacBook Pro 中的典型 13 现在具有原生 2560x1600 像素分辨率。全新 macOS 安装后,推荐的默认屏幕分辨率为 1440x900。用户可以通过系统偏好设置将其更改为 1680x1050。在 1440x900 或 1680x1050 的情况下,backingScaleFactor 正好是 2。典型的渲染路线会首先将任何东西渲染到非物理的 2880x1800 或 3360x2100 分辨率,然后 OS/GPU 使用未知方法进行最终重采样。

4

2 回答 2

1

你最好的选择可能是金属。声称默认值是视图的“以原生像素为单位”的大小MTKViewdrawableSize我不确定这是否意味着设备像素或后备存储像素。如果是后者,您可以直接关闭autoResizeDrawable并设置drawableSize

要获取显示器的物理像素数,您可以使用我的答案here

您还可以尝试使用 Core Graphics,并将CGImage该尺寸的 a 绘制到支持存储像素中的屏幕尺寸的矩形。所有缩放都可能在内部被取消。

于 2018-11-30T19:00:36.040 回答
-1

如果这些是资源图像,请使用资产目录为您的图像、图标等提供 x2 和 x3 分辨率版本。诸如此类的类NSImageView将自动选择显示分辨率的最佳版本。

如果您只有一些随机图像并且希望它以显示器的分辨率绘制,请获取backingScaleFactor视图窗口的。如果是,2.0则将 200 x 200 像素的图像绘制到 100 x 100 坐标点矩形中,将以 1:1 的原始分辨率绘制它。同样,如果比例因子为3.0,则 300 x 300 像素的图像将绘制到 100 x 100 坐标点矩形中。

毫不奇怪,Apple 有一个关于这个主题的广泛指南:OS X 的高分辨率指南

于 2018-11-30T06:21:48.547 回答