13
我想知道Mac OSX下的物理屏幕大小。但NSDeviceResolution
總是報錯值(72),所以分辨率/ dpi的計算結果是錯誤的。如何讀取OSX的物理屏幕大小?
在「About This Mac」裏面,有一個Mac型號的字符串,我的是「15英寸,2011年初」。所以我想知道應該有一種方法(在obj-c可能),閱讀該字符串,然後我可以使用它作爲物理屏幕大小。
任何幫助表示讚賞。
我想知道Mac OSX下的物理屏幕大小。但NSDeviceResolution
總是報錯值(72),所以分辨率/ dpi的計算結果是錯誤的。如何讀取OSX的物理屏幕大小?
在「About This Mac」裏面,有一個Mac型號的字符串,我的是「15英寸,2011年初」。所以我想知道應該有一種方法(在obj-c可能),閱讀該字符串,然後我可以使用它作爲物理屏幕大小。
任何幫助表示讚賞。
您可以使用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
獲得CGDirectDisplayID
的explicit documented means。
只有一句話 - NSDeviceSize包含系統點的大小,而不是物理像素。在視網膜顯示屏上(例如,iMac 27視網膜,或新的MacBook Pro)系統點通常爲2像素。所以你必須用[[NSScreen mainScreen] backingScaleFactor]乘以NSDeviceSize來獲得物理像素。 如果有人在macOS系統偏好設置中設置「縮放」分辨率,會出現更多混亂 - >顯示 – Slyv