2012-04-13 7 views
5

में टेक्स्ट स्ट्रिंग के वास्तविक दृश्य आकार को कैसे ढूंढें जावा में स्ट्रिंग के सही बाउंडिंग बॉक्स को ढूंढना संभव है? यानी सबसे छोटा आयताकार जिसमें पिक्सल शामिल होते हैं जो वास्तव में चित्रित होते हैं?जावा

मैंने फ़ॉन्टमैट्रिक्स और लाइनमैट्रिक्स को देखा है, और हालांकि वे एक स्ट्रिंग को पारित करने की अनुमति देते हैं, लेकिन वे पात्रों का विवरण नहीं लेते हैं, एह "ए", "पी" और "पी" सभी रिटर्न एक ही ऊंचाई।

विशेष रूप से, वे स्ट्रिंग ऊंचाई में वंश शामिल करने के लिए भले ही वास्तविक चरित्र आधारभूत नीचे उतर नहीं करता है लगता है। क्या कोई अन्य मेट्रिक्स है जो मैं एक्सेस कर सकता हूं जो एक सच्चे बाउंडिंग बॉक्स को वापस कर देता है?

वैकल्पिक रूप से, क्या यह बताने का कोई तरीका है कि किसी विशेष चरित्र में अवरोधक है या नहीं?

+1

क्या आपने getAscent(), getDescent() और charWidth() विधियों की जांच की है? विवरण के लिए [FontMetrics] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html) पृष्ठ देखें –

उत्तर

4

इस tutorial on measuring text, जो काफी हद तक FontMetrics पर ध्यान केंद्रित कर रही है।

अधिक उन्नत माप (किसी विशेष स्ट्रिंग के बाध्यकारी बॉक्स को पाने के लिए), तो TextLayout आपका मित्र है, as explained here

TextLayout पर कि ट्यूटोरियल के अलावा, जावाडोक इसके उपयोग के उदाहरण हैं।

+0

मैंने FontMetrics को देखा है, समस्या यह है कि ऊंचाई() मान हमेशा "ए" जैसे चरित्र के लिए वंश शामिल करना प्रतीत होता है। तो "ए" के आस-पास के मेरे बॉक्स में अक्षर के नीचे अतिरिक्त स्थान है। – Martin

+0

टेक्स्टलेआउट ट्यूटोरियल में जोड़ा गया लिंक, जो मुझे विश्वास है कि यह संभालता है। – daveb

+0

विशेष रूप से TextLayout.getBounds – daveb

0

आप javax.swing.SwingUtilities.layoutCompoundLabel का उपयोग कर सकते हैं। कई मानकों से मत रोको। दो संस्करण हैं, जेकंपोनेंट (शून्य हो सकता है) वाला संस्करण अधिक झंडे करता है। इसका उपयोग जेएलएबल के लिए किया जाता है, जो काफी बहुमुखी है, और आयत उत्पन्न करता है।

BTW कि यहां तक ​​कि "एक" एक descender सीमा के लिए जोड़ा जा सकता है, यहाँ भी होने की संभावना है। आप ग्लाइफ वेक्टर ले सकते हैं और वहां एक बाउंडिंग बॉक्स की गणना कर सकते हैं, लेकिन जब फ़ॉन्ट संकेत चल रहा है, तो पिक्सेल की स्थिति थोड़ी दूर है, कौन सी त्रुटि कई वर्णों पर जमा हो सकती है?