2010-11-18 10 views
11

आइए कहें कि मैं एरियल रेग्युलर में आकार 14 फ़ॉन्ट के साथ स्क्रीन पर "ए" अक्षर प्रस्तुत करता हूं। क्या सी # में गणना करने के लिए कोई तरीका है कि यह कितने पिक्सेल चौड़े हैं?निर्धारित करें कि एक प्रस्तुत चरित्र कितना विस्तृत है .NET


अब तक सभी उत्तरों के लिए धन्यवाद। जिस तरह से मैं पाठ प्रस्तुत कर रहा हूं वह ईएसआरआई की आर्कइंजिन के माध्यम से है जो डायनामिक डिस्प्ले इंजन के माध्यम से फैशन के बारे में एक दौर में जीडीआई या जीडीआई + (मुझे नहीं पता) को कॉल करता है।

उत्तर

10

यह प्रस्तुतीकरण इंजन पर निर्भर करता है। .NET जीडीआई या जीडीआई + का उपयोग कर सकते हैं। स्विचिंग UseCompatibleTextRendering तदनुसार संपत्ति को सेट करके या Application.SetCompatibleTextRenderingDefault विधि को कॉल करके किया जा सकता है।

GDI का उपयोग करते समय + आप MeasureString उपयोग करना चाहिए:

string s = "A sample string"; 

SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24)); 

GDI (यानी देशी Win32 प्रतिपादन) का उपयोग कर जब आप TextRenderer वर्ग का उपयोग करना चाहिए:

SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24)); 

अधिक जानकारी इस आलेख में वर्णित किया जाता है :

Text Rendering: Build World-Ready Apps Using Complex Scripts In Windows Forms Controls

ध्यान दें कि उपरोक्त वार्ता विंडोज फॉर्म के बारे में है। WPF में आप FormattedText

+0

ओह, 'UseCompatibleTextRendering' विधि' के साथ दिलचस्प बात। हालांकि, ऐसा लगता है कि केवल वीबी में कोडित अनुप्रयोगों पर लागू होता है, है ना? – Lucero

+0

@ लुसेरो: नहीं, यह सामान्य रूप से .NET पर लागू होता है। –

4

आप यह नहीं कहते कि आप इसे कैसे "प्रस्तुत करते हैं", लेकिन यदि आपके पास स्ट्रिंग है, तो आप MeasureString भी उपयोग कर सकते हैं।

3

Graphics.MeasureString आपको वर्तमान ग्राफिक्स इकाइयों में आकार प्राप्त करेगा।

3

वास्तव में, आप केवल अनुमान लगा सकते हैं। ट्रू टाइप संकेत, कर्नलिंग और ग्लिफ ओवरहैंग असंभव के बगल में अलग-अलग पात्रों को मापने में मदद करता है। कुछ कोड:

public float GetAWidth() { 
     using (var font = new Font("Arial", 14)) { 
      SizeF size = TextRenderer.MeasureText(new string('A', 100), font); 
      return size.Width/100; 
     } 
    } 

जो मेरी मशीन पर 13.1 देता है। ऐसा करने से बचें।

2

मेजरस्ट्रिंग प्रॉपर्टी इंगित करती है कि स्ट्रिंग को प्रदर्शित करने के लिए किसी फ़ील्ड को कितना चौड़ा उपयोग करना चाहिए, जिससे ओवरहैंग के लिए कुछ 'ढलान' की अनुमति मिलती है। विशेष रूप से, "ए" की रिपोर्ट की चौड़ाई और "बी" की रिपोर्ट की चौड़ाई "ab" की रिपोर्ट की चौड़ाई से कहीं अधिक है। एक अनुमानित अनुमान के रूप में, मैं सुझाव दूंगा कि यदि आप "ए" की चौड़ाई चाहते हैं, तो आप "||" की चौड़ाई घटाएं "| ए |" की चौड़ाई से। ध्यान दें कि यह अभी भी अनुमानित होगा, दोनों गोल करने के कारण, और चरित्र की चौड़ाई संदर्भ के साथ भिन्न होती है। उदाहरण के लिए, कई फोंट में, "TATATATAT" स्ट्रिंग "एएएएएटीटीटीटीटी" की तुलना में संकुचित दिखाई दे सकती है क्योंकि ए टी के नीचे घूम सकता है।

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