2012-09-25 17 views
13

Me gustaría saber el tamaño de la pantalla física en Mac OSX. Pero NSDeviceResolution siempre informa un valor incorrecto (72), por lo que el resultado del cálculo de la resolución/ppp es incorrecto.¿Cómo se lee el tamaño de la pantalla física de OSX?

Dentro de "Acerca de esta Mac", hay una cadena de modelo Mac allí, la mía es "15 pulgadas, principios de 2011". Así que me pregunto si debería haber una forma (en obj-c probablemente), para leer esa cadena y luego puedo usar eso como el tamaño de la pantalla física.

Cualquier ayuda es apreciada.

Respuesta

18

Puede usar CGDisplayScreenSize para obtener el tamaño físico de una pantalla en milímetros. Desde allí, puede computarizar el DPI dado que ya conoce la resolución.

Así, por ejemplo,

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 

Eso @"NSScreenNumber" cosa parece dudosa pero es la explicit documented means de obtener un CGDirectDisplayID de un NSScreen.

+1

Solo una observación: NSDeviceSize contiene el tamaño en puntos del sistema, no en píxeles físicos. En la pantalla retina (por ejemplo, iMac 27 retina, o nueva macbook pro), el punto del sistema suele ser de 2 píxeles. Por lo tanto, debe multiplicar NSDeviceSize por [[NSScreen mainScreen] backingScaleFactor] para obtener píxeles físicos. Hay aún más desorden si alguien establece una resolución "escalada" en las Preferencias del sistema macOS-> Muestra – Slyv

Cuestiones relacionadas