2012-11-12 15 views
12

क्या कोई निश्चित java.awt.Font ऑब्जेक्ट दिया गया है, जो कि किसी भी GUI घटकों का उपयोग नहीं करता है, पिक्सेल में स्ट्रिंग की लंबाई की गणना करने का कोई तरीका है?जावा में पिक्सेल में स्ट्रिंग लंबाई

+0

क्या यह awt फ़ॉन्ट के लिए है? – Link19

+0

यह भी देखें [यह उत्तर] (http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381) 'ग्लाइफ वेक्टर' का उपयोग करने के लिए। यह अंतिम छवि को एक जीयूआई में रखता है, लेकिन यह सिर्फ इसे प्रदर्शित करने के लिए है। –

उत्तर

10

जो किसी भी जीयूआई घटकों का उपयोग नहीं करता है?

यह आपके यहां क्या मतलब है इस पर निर्भर करता है। मुझे लगता है कि आप का मतलब है कि आप इसे HeadlessException प्राप्त किए बिना करना चाहते हैं।

सबसे अच्छा तरीका BufferedImage के साथ है।

Font font = ... ; 
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
FontMetrics fm = img.getGraphics().getFontMetrics(font); 
int width = fm.stringWidth("Your string"); 

कुछ इस तरह का उपयोग कर के अलावा, मुझे नहीं लगता कि आप कर सकते हैं: AFAIK, यह एक HeadlessException फेंक नहीं होंगे। FontMetrics बनाने और आपको फ़ॉन्ट आकार की जानकारी देने के लिए आपको एक ग्राफिक्स संदर्भ की आवश्यकता है।

3

आप (चौड़ाई सहित) फ़ॉन्ट सीमा प्राप्त करने के लिए Graphics2D वस्तु का उपयोग कर सकते हैं:

Graphics2D g2d = ... 
Font font = ... 
Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext()); 

लेकिन वह (एक Image से उदाहरण के लिए) कैसे आप Graphics2D वस्तु मिल जाएगा पर निर्भर करता है।

+0

मुझे लगता है कि एक जीयूआई घटक के रूप में गिना जाता है। – Link19

+0

@GlenLamb I भिन्न है, 'छवि' जीयूआई घटक नहीं हैं। – dacwe

+0

मैं सहमत हूं, लेकिन जीयूआई घटकों के बिना इसे करने की विशिष्ट आवश्यकता सामान्य रूप से बहुत कम होगी, अन्यथा आवश्यकता कम समझ में आती है। – Link19

2

यह मेरे लिए (137.0, 15.09375) का आउटपुट देता है। मुझे नहीं पता कि इकाइयां क्या हैं, लेकिन यह निश्चित रूप से आनुपातिक रूप से सही दिखती है और सीधे ग्राफिक्स 2 डी का उपयोग नहीं करती है।

Font f = new Font("Ariel", Font.PLAIN, 12); 
    Rectangle2D r = f.getStringBounds("Hello World! Hello World!", new FontRenderContext(null, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT)); 
    System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")"); 
संबंधित मुद्दे