7

から返された CGDirectDisplayID を指定すると、

CGError error = CGGetActiveDisplayList(8, directDisplayIDs, &displayCount);

Retina MacBook Pro の組み込み画面の場合、次を使用してネイティブ ピクセル寸法を取得することを期待します。

size_t pixelWidth = CGDisplayPixelsWide(directDisplayID);
size_t pixelHeight = CGDisplayPixelsHigh(directDisplayID);

ただし、これらの呼び出しは、現在選択されているモードの寸法のみを返します。画面の解像度を変更すると、別の値が返されます。15 インチ rMBP で 2880 x 1800 を取り戻したいと思っていました。

Retina MacBook Pro 画面のネイティブ ピクセル寸法を取得するにはどうすればよいですか?

4

6 に答える 6

2

CGDisplayModeGetIOFlagsディスプレイの情報を伝えることができます。ネイティブ解像度がkDisplayModeNativeFlag設定されました。以下はns、ウィンドウの現在の画面のネイティブ解像度に設定されますwin

CGDirectDisplayID sid = ((NSNumber *)[win.screen.deviceDescription
    objectForKey:@"NSScreenNumber"]).unsignedIntegerValue;
CFArrayRef ms = CGDisplayCopyAllDisplayModes(sid, NULL);
CFIndex n = CFArrayGetCount(ms);
NSSize ns;
for(int i = 0; i < n; ++i){
    CGDisplayModeRef m = (CGDisplayModeRef)CFArrayGetValueAtIndex(ms, i);
    if(CGDisplayModeGetIOFlags(m) & kDisplayModeNativeFlag){
        ns.width = CGDisplayModeGetPixelWidth(m);
        ns.height = CGDisplayModeGetPixelHeight(m);
        break;
    }
}
CFRelease(ms);
于 2018-11-30T05:07:35.777 に答える
0

使用NSScreenがオプションの場合、OSX 10.7 で次のようなことができます。

NSRect framePixels = [screen convertRectToBacking:[screen frame]];

framePixels.sizeディスプレイのピクセル解像度でscreenあり、へのポインタNSScreenです。たとえば、次のコードは、すべてのアクティブなディスプレイのピクセル解像度をコンソールに出力します。

for (NSScreen* screen in [NSScreen screens])
{
    NSRect framePixels = [screen convertRectToBacking:[screen frame]];
    NSLog(@"framePixels: (%f, %f)", framePixels.size.width, framePixels.size.height);
}
于 2013-02-11T21:46:38.870 に答える