2012-09-25 31 views
13

मै मैक ओएसएक्स के तहत भौतिक स्क्रीन आकार जानना चाहता हूं। लेकिन NSDeviceResolution हमेशा गलत मान (72) की रिपोर्ट कर रहा है, इसलिए संकल्प/डीपीआई की गणना परिणाम गलत है।ओएसएक्स के भौतिक स्क्रीन आकार को कैसे पढ़ा जाए?

"इस मैक के बारे में" के अंदर, वहां एक मैक मॉडल स्ट्रिंग है, मेरा "15-इंच, प्रारंभिक 2011" है। तो मुझे आश्चर्य है कि उस स्ट्रिंग को पढ़ने के लिए एक तरीका (ओबीजे-सी में शायद) होना चाहिए और फिर मैं इसे भौतिक स्क्रीन आकार के रूप में उपयोग कर सकता हूं।

किसी भी मदद की सराहना की जाती है।

उत्तर

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 से एक CGDirectDisplayID प्राप्त करने की explicit documented means है।

+1

बस एक टिप्पणी - NSDeviceSize में सिस्टम पॉइंट्स में आकार शामिल है, भौतिक पिक्सल नहीं। रेटिना डिस्प्ले पर (उदाहरण के लिए आईमैक 27 रेटिना, या नई मैकबुक समर्थक) सिस्टम पॉइंट आमतौर पर 2 पिक्सेल है। तो आपको भौतिक पिक्सल प्राप्त करने के लिए [[NSScreen मुख्यस्क्रीन] बैकिंगस्केल फैक्टर] द्वारा NSDeviceSize गुणा करना होगा। कोई और गड़बड़ है अगर कोई मैकोज़ सिस्टम प्राथमिकताओं में "स्केल" संकल्प सेट करता है-> प्रदर्शित करता है – Slyv