2012-09-25 12 views
13

Ich möchte die physische Bildschirmgröße unter Mac OSX wissen. Aber NSDeviceResolution meldet immer den falschen Wert (72), daher ist das Berechnungsergebnis der Auflösung/dpi falsch.Wie lese ich die physische Bildschirmgröße von OSX?

Innerhalb "Über diesen Mac" gibt es einen Mac-Modell String, meins ist "15-Zoll, Anfang 2011". Also ich frage mich, ob es einen Weg (in obj-c wahrscheinlich) gibt, diese Zeichenfolge zu lesen, und dann kann ich das als physische Bildschirmgröße verwenden.

Jede Hilfe wird geschätzt.

Antwort

18

Sie können CGDisplayScreenSize verwenden, um die physische Größe eines Bildschirms in Millimetern zu erhalten. Von diesem Computer aus können Sie die DPI angeben, dass Sie die Auflösung bereits kennen.

Also z.B.

NSScreen *screen = [NSScreen mainScreen]; 
NSDictionary *description = [screen deviceDescription]; 
NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue]; 
CGSize displayPhysicalSize = CGDisplayScreenSize(
      [[description objectForKey:@"NSScreenNumber"] unsignedIntValue]); 

NSLog(@"DPI is %0.2f", 
     (displayPixelSize.width/displayPhysicalSize.width) * 25.4f); 
     // there being 25.4 mm in an inch 

Die @"NSScreenNumber" Sache vertrackt aussieht, aber die explicit documented means ein CGDirectDisplayID von einem NSScreen zu erhalten.

+1

Nur eine Bemerkung - NSDeviceSize enthält Größe in Systempunkten, nicht physikalische Pixel. Auf dem Retina-Display (z. B. iMac 27 Retina oder neuer MacBook Pro) beträgt der Systempunkt normalerweise 2 Pixel. Sie müssen also NSDeviceSize mit [[NSScreen mainScreen] backingScaleFactor] multiplizieren, um physikalische Pixel zu erhalten. Es gibt noch mehr Chaos, wenn jemand "Skalierte" Auflösung in Mac OS Systemeinstellungen-> Anzeigen setzt – Slyv

Verwandte Themen