2008-11-18 18 views
12

मैं डब्ल्यूपीएफ में सी # के साथ एक मानचित्र नियंत्रण विकसित कर रहा हूं। मैं एक कैनवास नियंत्रण का उपयोग कर रहा हूँ उदा। 400 x 200 जिसे एक मानचित्र क्षेत्र निर्दिष्ट किया गया है उदा। 2,000 मीटर x 1,000 मीटर।सी # डब्ल्यूपीएफ संकल्प स्वतंत्रता?

मानचित्र का स्तर होगा: canvas_size_in_meters/real_size_in_meters

मैं canvas_size_in_meters ढूंढना चाहता हूं।

कैनवास। एक्टुअलविड्थ डीआईयू (डिवाइस इंडिपेंडेंट यूनिट्स) में चौड़ाई देता है। तो, 400 डीआईयू 400/96 = 4,17 इंच है, प्रदान किया गया है कि भौतिक मेरे मॉनिटर का संकल्प 96 डीपीआई है।

हालांकि, एक शासक का उपयोग करके, मैंने पाया कि मेरे मॉनीटर का भौतिक संकल्प 87 डीपीआई है। (केवल कुछ मॉनीटर हैं जिनके पास वास्तव में 96 भौतिक डीपीआई है)

कि डीपीआई अंतर (10%) स्क्रीन पर वास्तविक मानचित्र नियंत्रण चौड़ाई में + 10% अंतर का अनुवाद करता है।

मैं इंच में एक WPF नियंत्रण के आकार को सटीक रूप से और स्क्रीन रिज़ॉल्यूशन और डीपीआई सेटिंग के बावजूद कैसे मापूं?

उत्तर

9

मैं इंच में एक WPF नियंत्रण के आकार को सटीक रूप से और स्क्रीन रिज़ॉल्यूशन और डीपीआई सेटिंग के बावजूद कैसे मापूं?

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

भले ही मैन्युअल रूप से इसे बताने का कोई तरीका हो, या यदि आपके विशेष मॉनिटर के पास एक कस्टम ड्राइवर है जो विंडोज़ को सही जानकारी पास करता है, तो यह किसी और के कंप्यूटर पर काम नहीं करेगा, इसलिए खिड़कियां नहीं इस जानकारी को किसी भी आवेदन पर पास करें।

सबसे अच्छा आप कर सकते हैं Google नक्शे की तरह एक पैमाने आकर्षित करते हैं। आप जानते हैं कि 1 पिक्सेल == 1 मील, ताकि आप अपने मानचित्र पर 50 पिक्सेल लाइन खींच सकें, "यह लाइन 50 मील के बराबर है"

0

आपके लिए तत्काल उत्तर के लिए धन्यवाद।

मैं पूरी तरह से सहमत हूं, लेकिन मैं इसे पहले स्थान पर विश्वास नहीं करना चाहता था। आप देखते हैं कि नक्शा डेटा के विभिन्न परतों (स्केल आश्रित) को प्रदर्शित करने के लिए मानचित्र का उपयोग किया जाता है, तो मानचित्र के पैमाने की गणना अनुमानित होनी चाहिए। अधिकांश एप्लिकेशन उदाहरण के साथ स्लाइडर नियंत्रण का उपयोग करते हैं। "स्केल" सेट करने के लिए 10 अलग नक्शा स्तर।

आवेदन के लिए एक पूर्ण पैमाने के लिए महत्वपूर्ण नहीं है, संकेत पैमाने, 1: 15,000 की तरह प्रदर्शित करना अच्छा लगेगा।

एक निरपेक्ष पैमाने एक अतिरिक्त चर monitorPhysicalDPI (शुरू में 96 के लिए सेट) कि का उपयोग करता है बदलने के लिए थोड़ा बेहतर स्केलिंग देना होगा चुनता है (इसे फिर से नहीं महत्वपूर्ण है) के लिए की आवश्यकता होगी। नक्शा नियंत्रण के आकार होगा:

नक्शा।ActualWidth * (96/monitorPhysicalDPI) * inchesPerDIU, inchesPerDIU 1/96

फिर है इन सौंदर्य प्रसाधन हैं .. नहीं यह अच्छा नहीं होगा अगर विंडोज वास्तविक नियंत्रण के आयामों को पता था?

+0

यह बहुत अच्छा होगा। आप शब्द दस्तावेज़ और पीडीएफ देख सकते हैं और उन्हें 100% ज़ूम पर सेट कर सकते हैं और वास्तव में सही पृष्ठ आकार देख सकते हैं। मुझे आश्चर्य है कि उन्होंने इस साल पहले ठीक करने की कोशिश नहीं की है :-( –

1

मिमी या इंच में वर्तमान पिक्सेल आकार की गणना करने तरीका नहीं है (उपयोगकर्ता ओएस सेटअप, या बस पर नजर रखने के INF फ़ाइल स्थापित करने पर स्क्रीन आयामों के बारे में जानकारी देने के लिए होता है)। जैसा कि पहले की पोस्ट में बताया गया है, यह एक निश्चित मूल्य नहीं है और वर्तमान संकल्प और मॉनिटर आकार के आधार पर अलग-अलग होगा।

पहले वर्तमान समाधान प्राप्त करें। मान लें कि यह 1280x1024 है GetDeviceCaps फ़ंक्शन का उपयोग करके मिमी में मॉनिटर चौड़ाई प्राप्त करें। यह एक मानक विंडोज पुस्तकालय समारोह है।

पूर्णांक widthmm = GetDeviceCaps (deviceContext, HORZSIZE); मेरे मॉनिटर चौड़ाई है 362mm

तो पिक्सेल आकार = 362/1280 = 0.282 मिमी

इस विधि की सटीकता धारणा है कि प्रदर्शन क्षेत्र वास्तव में पर नजर रखने की चौड़ाई को शामिल किया गया पर निर्भर करता है।

तो मूल सवाल का जवाब देने, 400 x 200 पिक्सेल का कैनवास आकार (400 * 0,282/1000) एक्स (200 * 0,282/1000) मीटर में हो जब मेरा मॉनीटर पर दिखाया जाएगा।

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