由于现代macOS设备默认选择使用缩放的HiDPI分辨率,因此位图图像在屏幕上变得模糊。有没有一种方法可以将位图逐像素渲染为显示屏的真实本机物理像素?是否有任何CoreGraphics,OpenGL或金属API允许这样做而无需更改屏幕的显示模式?
如果您正在考虑那些convertXXXXToBacking
和朋友,请停下来。这是给你的解释。 MacBook Pro中的典型13现在具有2560x1600像素的原始分辨率。全新安装macOS后,默认的建议屏幕分辨率为1440x900。用户可以通过系统偏好设置将其更改为1680x1050。在1440x900或1680x1050的情况下,backingScaleFactor恰好为2。典型的渲染路径首先将任何东西渲染为非物理的2880x1800或3360x2100分辨率,并且OS / GPU使用未知方法进行了最后的重采样。
答案 0 :(得分:1)
您最好的选择可能是金属。 MTKView
的{{1}}声称默认值是视图的尺寸(以“本机像素”为单位)。我不确定这是否意味着设备像素或后备存储像素。如果是后者,则可以关闭drawableSize
并直接设置autoResizeDrawable
。
要获取显示器的物理像素数,可以使用我的答案here。
您还可以尝试使用大小为drawableSize
的Core Graphics绘制到后备存储像素中的屏幕大小的矩形上。所有缩放比例可能会在内部被抵消。
答案 1 :(得分:-1)
如果这些是资源图像,请使用资产目录来提供图像,图标等的x2和x3分辨率版本。诸如NSImageView
之类的类将自动为显示分辨率选择最佳版本。
如果您只有一些随机图像,并且希望以显示的分辨率绘制图像,请获取视图窗口的backingScaleFactor
。如果为2.0
,则将200 x 200像素的图像绘制到100 x 100的坐标点矩形中将以1:1原始分辨率绘制。同样,如果比例因子为3.0
,则300 x 300像素的图像将绘制为100 x 100的坐标点矩形。
毫不奇怪,苹果公司对此主题有详尽的指南:High Resolution Guidelines for OS X