3

Apple は最近、OS X で 30 ビット カラーのサポートを有効にしました。これを有効にする方法を示すサンプル コードをいくつか投稿しました。ただし、30 ビット カラーをサポートするディスプレイでアプリが実行されていることを検出する方法の例を提供していないようです。

ディスプレイが 30 ビット カラーをサポートするタイミングを検出し、それをサポートするディスプレイに対してのみ 30 ビット カラーを有効にし、それ以外の場合は 24 ビット カラーに戻すことができるようにしたいと考えています。

誰もそれを行う方法を知っていますか?

これまでのところ、CGDisplayAPI (CGDisplayCopyDisplayModeおよびCGDisplayModeCopyPixelEncoding) を使用して、ディスプレイのピクセル エンコーディングを照会してみました。しかし、これらは常に 24 ビットのエンコーディングを返すようCGDisplayModeCopyPixelEncodingで、Mac OS X 10.11 では廃止されました。「深度」プロパティも使用してみましNSScreen’sたが、これもピクセルあたり 24 ビットを返します。

組み込みのシステム情報アプリは明らかにこの情報を取得できますが、どうやってそれを行っているのかわかりません。ヒントはありますか?

4

3 に答える 3

1

macOS 10.12 の時点で、Apple には、ディスプレイが広色域カラー (つまり、ディープ カラー) に対応しているかどうかを検出できる新しい API がいくつかあります。これを行うにはいくつかの方法があります。

  1. NSScreen を使用する- (BOOL)canRepresentDisplayGamut:(NSDisplayGamut)displayGamut

    NSArray<NSScreen *> * screens = [NSScreen screens];
    BOOL hasWideGamutScreen = NO;
    
    for ( NSScreen * screen in screens )
    {
        if ( [screen canRepresentDisplayGamut:NSDisplayGamutP3] )
        {
            hasWideGamutScreen = YES;
            break;
        }
    }
    
  2. 使用CGColorSpaceIsWideGamutRGB(...):

    hasWideGamutScreen = CGColorSpaceIsWideGamutRGB( screen.colorSpace.CGColorSpace );
    
  3. NSWindowも持ってい- (BOOL)canRepresentDisplayGamut:(NSDisplayGamut)displayGamutます。

NSDisplayGamutP3ディスプレイが「広色域 RGB」または .色域の色。

于 2016-12-02T03:19:53.680 に答える