如何在OS X上以编程方式确定Retina MacBook Pro屏幕的原始像素分辨率?

时间:2012-12-13 11:43:15

标签: objective-c macos retina-display screen-resolution

给定从

返回的CGDirectDisplayID
CGError error = CGGetActiveDisplayList(8, directDisplayIDs, &displayCount);

对于Retina MacBook Pro上的内置屏幕,我希望使用

获取原生像素尺寸
size_t pixelWidth = CGDisplayPixelsWide(directDisplayID);
size_t pixelHeight = CGDisplayPixelsHigh(directDisplayID);

但是,这些调用仅返回当前所选模式的尺寸。如果我改变屏幕分辨率,我会得到不同的值。我希望在15" RMBP。

如何获取Retina MacBook Pro屏幕的原生像素尺寸?

5 个答案:

答案 0 :(得分:1)

我认为最好的方法是枚举所有显示模式(包括1x模式)并找到最大的1x模式尺寸。

您可以使用CGDisplayCopyAllDisplayModes()并将映射到kCGDisplayShowDuplicateLowResolutionModes的密钥kCFBooleanTrue的字典作为options传递给所有模式。您可以测试CGDisplayModeGetPixelWidth()是否等于CGDisplayModeGetWidth(),以确定哪些是1x。

答案 1 :(得分:1)

IdentityDbContext可以告诉您一些显示信息。原始分辨率设置为CGDisplayModeGetIOFlags。以下将把kDisplayModeNativeFlag设置为窗口ns当前屏幕的原始分辨率。

win

答案 2 :(得分:0)

我会走另一条路。我不是查找屏幕尺寸,而是获取正在运行程序的设备型号,然后将型号与其屏幕尺寸进行比较。编程型号和相应的屏幕尺寸可能会很繁琐,但这是我能想到的唯一方法。希望这可以帮助。

答案 3 :(得分:0)

如果使用NSScreen是一个选项,您可以在OSX 10.7中执行类似的操作:

NSRect framePixels = [screen convertRectToBacking:[screen frame]];

其中framePixels.size是您的显示器的像素分辨率,screen是指向NSScreen的指针。例如,此代码会将所有活动显示的像素分辨率打印到控制台:

for (NSScreen* screen in [NSScreen screens])
{
    NSRect framePixels = [screen convertRectToBacking:[screen frame]];
    NSLog(@"framePixels: (%f, %f)", framePixels.size.width, framePixels.size.height);
}

答案 4 :(得分:0)

system_profiler SPDisplaysDataType | grep Resolution:

在两台显示机器上,我得到以下输出:

      Resolution: 2880 x 1800 Retina
      Resolution: 2560 x 1440 (QHD/WQHD - Wide Quad High Definition)

我从类似的问题中听说过:How to get the physical display resolution on MacOS?