2012-09-25 19 views
13

Mi piacerebbe conoscere le dimensioni dello schermo fisico in Mac OSX. Ma NSDeviceResolution riporta sempre un valore errato (72), quindi il risultato del calcolo di risoluzione/dpi è errato.Come leggere le dimensioni dello schermo fisico di OSX?

All'interno di "Informazioni su questo Mac", è presente una stringa del modello Mac, il mio è "15 pollici, inizio 2011". Quindi mi chiedo se ci dovrebbe essere un modo (in obj-c probabilmente), per leggere quella stringa e quindi posso usarla come dimensione fisica dello schermo.

Qualsiasi aiuto è apprezzato.

risposta

18

È possibile utilizzare CGDisplayScreenSize per ottenere le dimensioni fisiche di uno schermo in millimetri. Da quel punto è possibile computer il DPI dato che già conosci la risoluzione.

Così ad es.

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 

Quella @"NSScreenNumber" cosa sembra poco raccomandabile, ma è il explicit documented means di ottenere un CGDirectDisplayID da un NSScreen.

+1

Solo una nota: NSDeviceSize contiene le dimensioni nei punti di sistema, non i pixel fisici. Sul display retina (ad esempio iMac 27 retina, o nuovo macbook pro) il punto di sistema è in genere 2 pixel. Quindi devi moltiplicare NSDeviceSize con [[NSScreen mainScreen] backingScaleFactor] per ottenere pixel fisici. C'è ancora più casino se qualcuno imposta la risoluzione "scalata" in macOS Preferenze di Sistema-> Display – Slyv

Problemi correlati