代码之家  ›  专栏  ›  技术社区  ›  swapnil patel

如何获得所有可能的屏幕分辨率可可?

  •  0
  • swapnil patel  · 技术社区  · 6 年前

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

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

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

    enter image description here

    enter image description here

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dad    5 年前

    在您提供的链接上接受的答案确实提供了您需要的答案,尽管它使用了一个未记录的选项标志,这是不幸的。你必须把选项字典交给 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(…) 过滤掉那些无效的(取决于您的用例)。

    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 . 希望能帮上忙( 不过,在你将代码用于任何类型的产品之前,先把它清理干净——这只是一个最快的可能被黑在一起的测试代码)。