有没有办法找到CGDisplay的缩放系数?

时间:2017-02-01 17:02:44

标签: macos quartz-graphics quartz-2d

我目前正在做一些测试,看看我的应用是否在Retina Macs上正常运行。我已经为此安装了Quartz Debug,我目前正在运行缩放模式。我的屏幕模式现在是960x540,但当然显示器的物理尺寸仍然是全高清,即1920x1080像素。

使用CGGetActiveDisplayList()查询监控数据库,然后在列表中的各个监视器上使用CGDisplayBounds()时,返回的监控大小为960x540。这是我的预期,因为据说CGDisplayBounds()使用全局显示坐标空间,而不是像素。

然而,令我惊讶的是,CGDisplayPixelsWide()CGDisplayPixelsHigh()也会返回960x540,虽然他们明确表示要返回像素,所以我希望它们会返回1920x1080。但他们没有。

这让我想知道如何使用CGDisplay API(即1920x1080而不是960x540)检索显示器的实际物理分辨率而不是缩放模式?有没有办法获得CGDisplay的缩放系数,以便我可以自己计算真实的物理分辨率?

我知道我可以使用backingScaleFactor方法获得此缩放系数,但这仅适用于NSScreen,如何获得CGDisplay的缩放系数?

1 个答案:

答案 0 :(得分:2)

您需要检查显示器的模式,而不仅仅是显示器本身。使用CGDisplayCopyDisplayMode(),然后CGDisplayModeGetPixelWidth()CGDisplayModeGetPixelHeight()。最后两个是相对较新的函数,文档主要存在于标题中。

当然,不要忘记CGDisplayModeRelease()模式对象。