Как получить все возможные разрешения экрана в какао? - PullRequest
0 голосов
/ 30 октября 2018

Я хочу получить все поддерживаемые разрешения для экрана Mac. Я использую приведенный ниже код для достижения всех поддерживаемых разрешений:

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

Используя приведенный выше код, я получаю только те разрешения, которые показаны на изображении ниже:

enter image description here

Я установил одно приложение, которое показывает поддерживаемые разрешения для моего экрана Mac. Он показывает разрешения, как показано на рисунке ниже. Я также хочу получить более высокие разрешения, как они показывают.

enter image description here

Я сослался на ссылку ниже: CGDisplayCopyAllDisplayModes пропускает один допустимый режим

Но я не знаю, как получить другие поддерживаемые разрешения, используя kCGDisplayShowDuplicateLowResolutionModes.

1 Ответ

0 голосов
/ 05 ноября 2018

Принятый ответ по предоставленной вами ссылке действительно представляет ответ, который вам нужен, хотя он использует недокументированный флажок параметров, что вызывает сожаление. Вы должны передать словарь опций своему звонку на 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, чтобы другие могли видеть весь рабочий проект . Надеюсь, это кому-нибудь поможет ( DO очистите этот код, прежде чем использовать его в любом виде продукта - это всего лишь самый быстрый из возможных взломанных тестовых кодов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...