2010-10-24 17 views
8

अक्षम करें मेरे पास एक WinForm एप्लिकेशन है जो कई छवियों को होस्ट करता है। जब मैं एक विन 7 मशीनों पर एप्लिकेशन डालता हूं जिसमें 120 का डीपीआई होता है, तो यह फ़ॉर्म के रूप को पूरी तरह से खंडित करता है। क्या मेरे फॉर्म के लिए स्केलिंग को अक्षम करने का कोई तरीका है?सी # WinForms डीपीआई स्केलिंग

मुझे पता है कि यह ऐसा कुछ है जिसे सलाह नहीं दी जाती है और डीपीआई को ओएस द्वारा निर्बाध और संभाला जाना चाहिए। लेकिन जब एक चमकीले आवेदन की बात आती है, तो छवियों को अच्छी तरह से स्केल नहीं किया जाता है। मेरे पास सभी डीपीआई विविधताओं के लिए छवियां बनाने की लक्जरी नहीं है, इसलिए कृपया उत्तर के रूप में सुझाव न दें।

उत्तर

10

जब आप AutoScaleMode प्रॉपर्टी को बदलते हैं तो आपको बड़ी समस्याएं आती हैं। डीपीआई बढ़ाने से सिस्टम फ़ॉन्ट आकार भी बदल जाता है। आवश्यक रूप से, फ़ॉन्ट आकार 1/72 इंच अंक में व्यक्त किए जाते हैं। डीपीआई बढ़ने पर समान बिंदु आकार प्राप्त करने के लिए फोंट को बड़ा होना चाहिए और उसी दूरी से देखे जाने पर टेक्स्ट को पठनीय के रूप में रखना चाहिए।

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

हां, पृष्ठभूमि छवियों को बड़े नियंत्रण या रूप में फिट करने के लिए स्केल करने की आवश्यकता है। छवि में एक पिक्सेल अब मॉनिटर के पिक्सेल में एक-से-एक को मानचित्र नहीं करता है। डिफ़ॉल्ट ग्राफिक्स। इंटरपोलेशन मोड मूल्य छवि फ़िल्टर करने का एक काफी सभ्य काम करता है। लेकिन यह इस तरह की छवि पर निर्भर करता है कि यह कितना अच्छा हो जाता है। एक तस्वीर लगभग हमेशा अच्छी तरह से तराजू। बारीकी से विस्तृत लाइन कला और पाठ नहीं है। सही प्रकार की छवि चुनना अलग-अलग बनाने के लिए टालने का एक लंबा रास्ता तय करता है।

यह समस्या तब तक नहीं जा रही है जब तक कि मॉनीटर को प्रिंटर के प्रकार का समाधान शुरू न हो जाए। डेस्कटॉप मॉनीटर के लिए हम 600 डीपीआई से अभी भी एक लंबा सफर तय कर रहे हैं। फ़ोन पहले होंगे।

+1

600 डीपीआई स्क्रीन वास्तविकता बन रही हैं। बस अपने फोन को देखो (ठीक है, 600 नहीं बल्कि 480 यहाँ हैं)। भविष्य यहाँ है। – Hooch

3

आप AutoScaleMode फॉर्म की संपत्ति None पर सेट कर सकते हैं।

+7

मैं सीमित सफलता के साथ इस की कोशिश की। – MarkP

+0

नियंत्रण के फ़ॉन्ट्स को मैन्युअल रूप से स्केल करने के साथ इसे संयोजित करना (जैसा कि यहां किसी अन्य समाधान में सुझाया गया है) ने मेरे लिए समस्या हल की। – Zarat

3

Form1-निर्माता में InitializeComponent को स्वत: जनरेट कॉल करने से पहले कोड की एक पंक्ति जोड़ना मेरे लिए इसे हल:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     // Make the GUI ignore the DPI setting 
     Font = new Font(Font.Name, 8.25f * 96f/CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont); 
     InitializeComponent(); 
    } 
} 
+0

150% स्केल किए गए 4 के मॉनिटर – SlapY

+0

के साथ विंडोज 10 पर बिल्कुल काम नहीं करता है ऑटोस्केलेमोड को सेट करने के साथ इसे संयोजित करने के लिए कोई भी समस्या मेरे लिए समस्या हल नहीं करती है – Zarat

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