2009-01-07 8 views
7

मैं अपने आवेदन में 'सही आकार' पर एक छवि प्रदर्शित करना चाहता हूं। इसके लिए मुझे डिस्प्ले के पिक्सेल आकार को जानने की जरूरत है।मैं अपने मॉनिटर के सही पिक्सेल आकार को .NET में कैसे निर्धारित करूं?

मुझे पता है कि विंडोज़ डिस्प्ले रेज़ोल्यूशन नाममात्र 96 डीपीआई है, लेकिन मेरे उद्देश्यों के लिए मैं एक बेहतर अनुमान चाहता हूं। मैं समझता हूं कि यह जानकारी हमेशा उपलब्ध या सटीक नहीं हो सकती है (जैसे पुराने सीआरटी डिस्प्ले), लेकिन मुझे लगता है कि एलसीडी डिस्प्ले के पूर्वाग्रह के साथ यह संभव होना चाहिए!

क्या मेरे प्रदर्शन का पिक्सेल आकार प्राप्त करने का कोई तरीका है?

क्या यह निर्धारित करने का कोई तरीका है कि पिक्सेल आकार सटीक है या नहीं?

.NET API की पसंदीदा (मुझे उन्हें नहीं मिला), लेकिन Win32 भी ठीक है, मैं पी/Invoke से खुश हूं।

उत्तर

24

प्रदर्शन आकार के लिए आप Screen.PrimaryScreen.Bounds.Size (या Screen.GetBounds(myform)) चाहते हैं।

आप डीपीआई चाहते हैं, Graphics की DpiX और DpiY गुण का उपयोग करें:

PointF dpi = PointF.Empty; 
using(Graphics g = this.CreateGraphics()){ 
    dpi.X = g.DpiX; 
    dpi.Y = g.DpiY; 
} 

ओह, रुको! आप वास्तविक चाहते थे, एक शासक को मॉनीटर तक बढ़ाएं और मापें, आकार ?! नहीं। किसी भी ओएस सेवाओं का उपयोग करना संभव नहीं है। ओएस मॉनिटर के वास्तविक आयामों को नहीं जानता है, या उपयोगकर्ता ने कैलिब्रेटेड कैसे किया है। इनमें से कुछ जानकारी सैद्धांतिक रूप से पता लगाने योग्य है, लेकिन यह ओएस के लिए विश्वसनीय रूप से इसका उपयोग करने के लिए पर्याप्त निर्धारक नहीं है, इसलिए ऐसा नहीं होता है।

आसपास के काम के रूप में, आप कुछ चीजों को आजमा सकते हैं।

  • आप स्थापित मॉनीटर डिवाइस की डिस्प्ले स्ट्रिंग से पूछताछ करने का प्रयास कर सकते हैं (मुझे यकीन नहीं है कि यह कैसे करें) और देखें कि क्या आप उसमें से एक समझदार आकार को पार्स कर सकते हैं। उदाहरण के लिए, मॉनीटर "ValueBin E17p" हो सकता है, और आप कम कर सकते हैं कि यह 17 "मॉनीटर है। बेशक, यह डिस्प्ले स्ट्रिंग" प्लग और प्ले मॉनिटर "होने की संभावना है। यह योजना सुंदर स्केची है सबसे अच्छे रूप में।
  • आप उपयोगकर्ता क्या आकार की निगरानी वे कह सकते हैं। शायद को पता लग जाएगा।

एक बार जब आप जानते हैं (या लगता क्या आप जानते हैं) की निगरानी के विकर्ण आकार, आप अपने भौतिक पहलू अनुपात को खोजने की जरूरत है।दोबारा, कुछ चीजें:

  • मान लें कि वर्तमान पिक्सेल पहलू अनुपात मॉनीटर के भौतिक पहलू अनुपात से मेल खाता है। यह मानता है कि (ए) उपयोगकर्ता ने एक प्रस्ताव चुना है जो उनके मॉनिटर के लिए आदर्श है, और (बी) मॉनीटर में स्क्वायर पिक्सेल है। मुझे वर्तमान उपभोक्ता-उन्मुख कंप्यूटर मॉनिटर के बारे में पता नहीं है जिसमें स्क्वायर पिक्सल नहीं हैं, लेकिन पुराने लोगों ने किया और नए हो सकते हैं।
  • उपयोगकर्ता से पूछें। शायद वे जान लेंगे।

एक बार जब आप जानते हैं (या लगता क्या आप जानते हैं) क्या मॉनिटर के विकर्ण आकार और शारीरिक पहलू अनुपात है, तो आप आप इसे शारीरिक चौड़ाई और ऊंचाई है गणना कर सकते हैं। एक + बी = सी , तो कुछ गणना यह आप पर दे देंगे अच्छा:

आप पता चला कि यह एक 17 "मॉनिटर है, और इसके वर्तमान संकल्प 1280 है यदि x 1024:
+ 1024 = 2686976
Sqrt (2686976) = 1639,1998047828092637409837247032
17 "* 1280/1639.2 = 13.274768179599804782820888238165"
17 "* 10 24/1639.2 = 10.619814543679843826256710590532 "

यह भौतिक चौड़ाई 13.27" और भौतिक ऊंचाई 10.62 पर रखता है "। इससे पिक्सेल 13.27 "/ 1280 = 10.62"/1024 = 0.01037 "या लगभग 0.263 मिमी

बेशक, यदि उपयोगकर्ता के पास उचित समाधान नहीं है, तो यह सब अमान्य है, मॉनिटर में गैर- स्क्वायर पिक्सल, या यह एक पुराना एनालॉग मॉनीटर है और पूरे भौतिक स्क्रीन को भरने के लिए डिस्प्ले के लिए नियंत्रण ठीक से समायोजित नहीं किए जाते हैं। या बदतर, यह प्रोजेक्टर हो सकता है।

अंत में, आप प्रदर्शन करने से सबसे अच्छा हो सकते हैं एक अंशांकन चरण जहां आपके पास उपयोगकर्ता है, वास्तव में स्क्रीन पर शासक को पकड़ें, और आपके लिए कुछ आकार का आकलन करें। आप:

  • क्या उपयोगकर्ता किसी भी दो अंक (या एक सेंटीमीटर) के अलावा माउस पर क्लिक करता है।
  • स्क्रीन पर एक बॉक्स बनाएं और उपयोगकर्ता अपनी ऊंचाई को समायोजित करने के लिए ऊपर और नीचे तीर दबाएं, और बाएं और दाएं तीर अपनी चौड़ाई को समायोजित करने के लिए दबाएं, जब तक कि बॉक्स उनके अनुसार एक इंच (या सेंटीमीटर) वर्ग न हो शासक।
  • स्क्रीन पर एक बॉक्स बनाएं और उपयोगकर्ता आपको बताए कि प्रत्येक आयाम में कितने इंच/सेंटीमीटर हैं।

कोई फर्क नहीं पड़ता कि आप क्या करते हैं, अपने परिणामों को 100% सटीक होने की उम्मीद न करें। आपके लिए (या उपयोगकर्ता) खेलने के लिए बहुत सारे कारक हैं, हर बार यह बिल्कुल सही करने के लिए।

ध्यान रखें कि 96 डीपीआई आमतौर पर सटीक के लिए बहुत करीब है। गैर-प्रक्षेपित स्क्रीन पर आधुनिक पिक्सल लगभग 0.25 मिमी होते हैं, देते हैं या लेते हैं, इसलिए आप आम तौर पर 100 भौतिक पिक्सल प्रति इंच के साथ समाप्त होते हैं, देते हैं या लेते हैं, यदि मॉनीटर अपने मूल रिज़ॉल्यूशन पर सेट होता है।(बेशक, यह एक बड़ा सामान्यीकरण है और सभी मॉनीटर पर लागू नहीं होता है। उदाहरण के लिए, यदि मुझे चश्मा सही तरीके से याद हैं, तो ईई पीसी आकार में लगभग 0.1 9 मिमी है।)

1

क्षमा करें, आपको इस जानकारी के लिए पी/आमंत्रित करना होगा।

यहाँ लिंक है कि मैंने कुछ समय पहले यह के लिए उपयोग किया है: http://www.davidthielen.info/programming/2007/05/get_screen_dpi_.html

+1

यह यह सिर्फ हो जाता है की तरह जो कुछ खिड़कियों डीपीआई करने के लिए सेट है, जो आम तौर पर स्क्रीन आकार और संकल्प की परवाह किए बिना 96dpi दिया जाएगा लग रहा है। –

+2

ग्राफिक्स का यह उदाहरण वापस आएगा (पी डैडी उत्तर देखें)। पी/Invoke के लिए कोई ज़रूरत नहीं है। –

1

तुम सिर्फ अपनी स्क्रीन आकार से गणना के द्वारा जांच कर सकते हैं

cos(45)*LCD_SCREEN_DIAGONAL_IN_INCHES/sqrt(HORZ_RES^2 + VERT_RES^2) 

आप इंच

में पिक्सेल चौड़ाई देना होगा कि
+0

मुझे लगता है कि प्रश्न यह है कि कैसे प्रोग्रामिंग रूप से LCD_SCREEN_DIAGONAL_IN_INCHES –

+0

शब्द "चेक" शब्द प्राप्त करने के लिए, वह डीपीआई – Pyrolistical

1

GetDeviceCaps कुछ आंकड़े प्राप्त करने के लिए पी/इनवॉक्ड किया जा सकता है, लेकिन मैंने आंकड़े कभी भरोसेमंद नहीं जानते हैं ...

0

आप भौतिक प्राप्त कर सकते हैं रजिस्ट्री में संग्रहीत ईडीआईडी ​​जानकारी का उपयोग कर प्रदर्शन के आयाम। आप EnumDisplayDevices विंडोज एपीआई कॉल का उपयोग कर उपयुक्त मॉनीटर की रजिस्ट्री कुंजी प्राप्त कर सकते हैं।

Physical Dimensions to the Screen object:

+0

लिंक प्राप्त करने के बाद जांचने का एक तरीका मांग रहा था। – DuckMaestro

संबंधित मुद्दे