2012-09-25 54 views
13

我想知道Mac OSX下的物理屏幕大小。但NSDeviceResolution總是報錯值(72),所以分辨率/ dpi的計算結果是錯誤的。如何讀取OSX的物理屏幕大小?

在「About This Mac」裏面,有一個Mac型號的字符串,我的是「15英寸,2011年初」。所以我想知道應該有一種方法(在obj-c可能),閱讀該字符串,然後我可以使用它作爲物理屏幕大小。

任何幫助表示讚賞。

回答

18

您可以使用CGDisplayScreenSize以毫米爲單位獲取屏幕的物理尺寸。由於您已經知道該決議,因此您可以計算新聞部。

因此,例如,

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 

@"NSScreenNumber"東西看起來狡猾,而是從NSScreen獲得CGDirectDisplayIDexplicit documented means

+1

只有一句話 - NSDeviceSize包含系統點的大小,而不是物理像素。在視網膜顯示屏上(例如,iMac 27視網膜,或新的MacBook Pro)系統點通常爲2像素。所以你必須用[[NSScreen mainScreen] backingScaleFactor]乘以NSDeviceSize來獲得物理像素。 如果有人在macOS系統偏好設置中設置「縮放」分辨率,會出現更多混亂 - >顯示 – Slyv