2008-11-21 12 views
5

विंडोज फॉर्म:डॉटनेट: आप फ़ॉन्ट के लिए औसत वर्ण चौड़ाई कैसे प्राप्त करते हैं?

System.Drawing के लिए फ़ॉन्ट ऊंचाई प्राप्त करने का एक तरीका है।

Font font = new Font("Arial", 10 , FontStyle.Regular); 
float fontHeight = font.GetHeight(); 

लेकिन आप औसत वर्ण चौड़ाई जैसे अन्य टेक्स्ट मीट्रिक कैसे प्राप्त करते हैं?

उत्तर

4

उपयोग Graphics.MeasureString विधि

private void MeasureStringMin(PaintEventArgs e) 
{ 

    // Set up string. 
    string measureString = "Measure String"; 
    Font stringFont = new Font("Arial", 16); 

    // Measure string. 
    SizeF stringSize = new SizeF(); 
    stringSize = e.Graphics.MeasureString(measureString, stringFont); 

    // Draw rectangle representing size of string. 
    e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height); 

    // Draw string to screen. 
    e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0)); 
} 
1

एक समान प्रश्न here

मुझे लगता है कि आप उपयोग करना है कि हर चरित्र पर और औसत की गणना होगा अपने आप को

+1

हे। मैं वास्तव में स्ट्रिंग को बिटमैप पर खींचने की विधि से प्यार करता था और फिर यह देखने के लिए पिक्सल पढ़ता था कि वास्तव में यह कितना चौड़ा है। अक्षम लेकिन बिल्कुल काम करने की गारंटी है। :) – MusiGenesis

1

मैं अपने जवाब देखें मैंने .NET में औसत वर्ण चौड़ाई संपत्ति कभी नहीं देखी है। आप Graphics.MeasureString या TextRenderer.MeasureString का उपयोग कर किसी विशेष फ़ॉन्ट में किसी विशेष स्ट्रिंग की चौड़ाई प्राप्त कर सकते हैं।

4

फोंट के लिए सख्ती से औसत चौड़ाई नहीं है क्योंकि किसी भी दिए गए पत्र से पहले और उसके बाद के अक्षरों के आधार पर कर्निंग का प्रभाव हो सकता है।

यदि आप एक निश्चित-चौड़ाई परिदृश्य में उपयोग किए गए गैर-निर्धारित आकार के फ़ॉन्ट्स को चाहते हैं, तो आपका मुख्य विकल्प अक्षर को ऊपरी केस "डब्ल्यू" वर्ण की चौड़ाई से स्थानांतरित करना है। ,

StringBuilder sb = new StringBuilder(); 

// Using the typical printable range 
for(char i=32;i<127;i++) 
{ 
    sb.Append(i); 
} 

string printableChars = sb.ToString(); 

// Choose your font 
Font stringFont = new Font("Arial", 16); 

// Now pass printableChars into MeasureString 
SizeF stringSize = new SizeF(); 
stringSize = e.Graphics.MeasureString(printableChars, stringFont); 

// Work out average width of printable characters 
double average = stringSize.Width/(double) printableChars.Length; 
+0

यह वास्तव में काम नहीं करता है, क्योंकि प्रिंट करने योग्य चार्जों के कुछ आसन्न पात्रों में कर्नाई जोड़े हो सकते हैं। –

+3

मुझे इसके बारे में पता था, मैंने पहले वाक्य में ऐसा कहा था। लेकिन मैं उस अस्वीकरण के बाद, मैंने उन प्रश्नों का उत्तर दिया जिन्हें उन्होंने पूछा था। –

2

ट्रिकी:

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

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

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