Apple hat kürzlich die 30-Bit-Farbunterstützung unter OS X aktiviert. Sie haben einige sample code veröffentlicht, die zeigen, wie dies aktiviert wird. Sie bieten jedoch kein Beispiel dafür, wie Sie feststellen können, wenn Ihre App auf einem Bildschirm mit 30-Bit-Farben ausgeführt wird.Erkennen, ob ein Display 30-Bit-Farbe unterstützt
Wir möchten erkennen, wenn die Anzeige (n) eine 30-Bit-Farbe unterstützen und nur 30-Bit-Farbe für Displays, die dies unterstützen, aktivieren und andernfalls auf 24-Bit-Farbe zurücksetzen.
Weiß jemand, wie man das macht?
Bisher habe ich versucht, mit den CGDisplay
APIs (CGDisplayCopyDisplayMode
und CGDisplayModeCopyPixelEncoding
) die Pixelcodierung des Displays abzufragen. Diese scheinen jedoch immer 24-Bit-Codierungen zurückzuliefern, und CGDisplayModeCopyPixelEncoding
war in Mac OS X 10.11 veraltet. Ich habe auch versucht, NSScreen’s
"Tiefe" -Eigenschaft zu verwenden, aber das gibt auch 24 Bits pro Pixel zurück.
Die integrierte System Information App ist offensichtlich in der Lage, diese Informationen zu bekommen, ich kann einfach nicht herausfinden, wie sie es tun. Irgendwelche Hinweise?
Wow, diese ** sind ** ziemlich schlechte Optionen. Nach dem 'NSLog'-Hinweis habe ich festgestellt, dass die 'CGDisplayModeRef'-Struktur einen Zeiger auf ein Wörterbuch (' CFDictionary') hat, das 16 Bytes von der Basis der Struktur im Speicher entfernt ist. Sie können dann dieses Wörterbuch für die Schlüssel "PixelEncoding" oder "BitsPerSample" abfragen. Dies ist jedoch eine ziemlich schreckliche Lösung, da ich mich nicht auf die private Implementierung der 'CGDisplayModeRef'-Struktur verlassen möchte, da sie sich bei zukünftigen OS-Aktualisierungen ändern kann. Ich möchte 'CGDisplayIOServicePort()' nicht wirklich verwenden, da es veraltet ist. Wirklich schlechte Möglichkeiten ... – Cutterpillow