gpt4 book ai didi

objective-c - 如何在 cocoa 中获得所有可能的屏幕分辨率?

转载 作者:行者123 更新时间:2023-12-03 17:37:42 26 4
gpt4 key购买 nike

我想获取 Mac 屏幕支持的所有分辨率。我使用以下代码来实现所有支持的分辨率:

CFArrayRef modeList;
modeList=CGDisplayCopyAllDisplayModes(displays[i], NULL);

通过使用上面的代码,我只能获得如下图所示的分辨率:

enter image description here

我安装了一个应用程序,它显示我的 Mac 屏幕支持的分辨率。它显示的分辨率如下图所示。我还想获得显示的更高分辨率。

enter image description here

我引用了以下链接: CGDisplayCopyAllDisplayModes leaves out one valid mode

但我不知道如何使用 kCGDisplayShowDuplicateLowResolutionModes 获取其他支持的分辨率。

最佳答案

您提供的链接中接受的答案确实提供了您需要的答案,尽管它使用了未记录的选项标志,这是不幸的。您必须将选项字典传递给 CGDisplayCopyAllDisplayModes 的调用正如它所表明的:

CGDirectDisplayID mainDisplayID = CGMainDisplayID();
CFStringRef keys[1] = { kCGDisplayShowDuplicateLowResolutionModes };
CFBooleanRef values[1] = { kCFBooleanTrue };

CFDictionaryRef options = CFDictionaryCreate(kCFAllocatorDefault, (const void**) keys, (const void**) values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks );

CFArrayRef modesArray = CGDisplayCopyAllDisplayModes( mainDisplayID, options );

然后查看返回的显示模式似乎对我有用。请注意,您可能需要检查 CGDisplayModeIsUsableForDesktopGUI(…) 返回的 bool 值过滤掉那些无效的(取决于您的用例)。

显然,您将依次传递每个不同的显示 ID,并获得如下所示的输出:

Display 3: external, main
points: (2560 x 1440), pixels: (2560, 1440)
points: (1280 x 720), pixels: (1280, 720)
points: (800 x 600), pixels: (800, 600)
points: (1024 x 768), pixels: (1024, 768)
points: (1280 x 960), pixels: (1280, 960)
points: (1344 x 1008), pixels: (1344, 1008)
points: (1344 x 756), pixels: (1344, 756)
points: (1600 x 1200), pixels: (1600, 1200)
points: (1600 x 900), pixels: (1600, 900)
points: (2048 x 1152), pixels: (2048, 1152)

Display 2: builtin,
points: (2880 x 1800), pixels: (2880, 1800)
points: (1440 x 900), pixels: (1440, 900)
points: (3360 x 2100), pixels: (3360, 2100)
points: (2560 x 1600), pixels: (2560, 1600)
points: (2048 x 1280), pixels: (2048, 1280)
points: (1650 x 1050), pixels: (1650, 1050)
points: (1280 x 800), pixels: (1280, 800)
points: (1152 x 720), pixels: (1152, 720)
points: (1024 x 768), pixels: (1024, 768)
points: (800 x 600), pixels: (800, 600)

Display 5: external,
points: (1920 x 1200), pixels: (1920, 1200)
points: (960 x 600), pixels: (960, 600)
points: (800 x 600), pixels: (800, 600)
points: (1024 x 768), pixels: (1024, 768)
points: (1024 x 640), pixels: (1024, 640)
points: (1280 x 960), pixels: (1280, 960)
points: (1280 x 800), pixels: (1280, 800)
points: (1344 x 1008), pixels: (1344, 1008)
points: (1344 x 840), pixels: (1344, 840)
points: (1600 x 1200), pixels: (1600, 1200)
points: (1600 x 1000), pixels: (1600, 1000)

另请注意,这些数字与 MBP 等显示的数字不一致。 “看起来像 1920 x 1200”,与列出的任何分辨率都不匹配。

<小时/>

另一个开发人员在使其正常工作时遇到了困难,因此我将我的快速破解测试项目推送到了 github,以便其他人可以看到 entire working project 。希望这会对某人有所帮助(一定在将代码用于任何类型的产品之前清理该代码 - 这只是最快可能的测试代码)。

关于objective-c - 如何在 cocoa 中获得所有可能的屏幕分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53064744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com