Apple недавно включила поддержку 30-битного цвета в OS X. Они разместили сообщение sample code, в котором показано, как включить это. Тем не менее, они не показывают пример того, как вы можете обнаружить, когда приложение работает на дисплее, поддерживающем 30-битный цвет.Обнаружение, если дисплей поддерживает 30-битный цвет
Мы хотели бы иметь возможность обнаруживать, когда дисплей поддерживает 30-битный цвет и разрешает только 30-битный цвет для дисплеев, которые поддерживают его, и возвращают к 24-битовому цвету в противном случае.
Кто-нибудь знает, как это сделать?
До сих пор я пытался использовать API-интерфейсы CGDisplay
(CGDisplayCopyDisplayMode
и CGDisplayModeCopyPixelEncoding
), чтобы запросить кодировку пикселя дисплея. Но они, похоже, всегда возвращают 24-битные кодировки, а CGDisplayModeCopyPixelEncoding
устарел в Mac OS X 10.11. Я также пытался использовать NSScreen’s
свойство «depth», но это также возвращает 24 бит на пиксель.
Встроенное системное информационное приложение, очевидно, может получить эту информацию, я просто не могу понять, как они это делают. Любые намеки?
Вау, эти ** являются ** довольно плохими вариантами. Следуя подсказке «NSLog», я обнаружил, что структура 'CGDisplayModeRef' имеет указатель на словарь (' CFDictionary'), который составляет 16 байтов из базы структуры в памяти. Затем вы можете запросить этот словарь для ключей '' PixelEncoding "или' "BitsPerSample" ". Однако это довольно ужасное решение, так как я не хочу полагаться на частную реализацию структуры CGDisplayModeRef, поскольку это может измениться в любом будущем обновлении ОС. Я действительно не хочу использовать 'CGDisplayIOServicePort()' либо, так как он устарел. Действительно плохие варианты ... – Cutterpillow