2011-06-01 10 views
11

FontMetrics में फ़ॉन्ट के cap height और x-height के लिए गेटर्स नहीं हैं।जावा: आप फ़ॉन्ट की टोपी ऊंचाई और एक्स-ऊंचाई कैसे प्राप्त करते हैं?

मैं इन मानों को कैसे प्राप्त कर सकता हूं?

जहां तक ​​टोपी की ऊंचाई बढ़ जाती है, वहां एक विशेष पूंजी पत्र की कोई गारंटी नहीं है कि पत्र की चढ़ाई टोपी ऊंचाई के समान ही है। (उदाहरण के लिए पूंजी एच को शीर्ष पर फ्लैट होने की गारंटी नहीं है)

जहां तक ​​x ऊंचाई जाती है, मुझे लगता है कि यह शायद "x" की ऊंचाई के समान है, लेकिन फिर, कोई गारंटी नहीं है ।


संपादित: Grr! मैंने विशिष्ट चरित्र अनुक्रमों के लिए FontMetrics.getBounds() और FontMetrics.getLineMetrics() की कोशिश की, और मुझे हमेशा ऊंचाई के लिए एक ही जवाब मिलता है (getBounds() चौड़ाई के लिए अलग-अलग होता है)। hasUniformLineMetrics() में एक फ़ॉन्टमेट्रिक्स के बारे में एक नोट है जिसमें चरित्र सेट को कवर करने के लिए कई फोंट हैं, लेकिन इसमें वर्ण समूह शामिल हैं, व्यक्तिगत वर्ण नहीं।

+0

एक अंतरफलक 'java.awt.font.OpenType' जो फ़ॉन्ट टेबल पुनः प्राप्त, और इस प्रकार प्राप्त करने के लिए इस्तेमाल किया जा सकता है फ़ॉन्ट द्वारा परिभाषित 'एक्स-ऊंचाई'। हालांकि, उस इंटरफ़ेस का स्पष्ट रूप से उपयोग नहीं किया जाता है: http://stackoverflow.com/questions/33716004/how-do-i-use-the-opentype-interface-in-java – HRJ

उत्तर

0

मैंने इसके साथ काम नहीं किया है, लेकिन GlyphView.GlyphPainter कक्षा में getAscent, getDescent और getHeight विधियां हैं। यह जांचने के लिए कुछ हो सकता है।

0

ठीक है, आप टेक्स्ट फिट बैठता है के साथ एक बॉक्स बनाने की कोशिश कर रहे हैं, मुझे लगता है कि तुम सिर्फ ऊंचाई फ़ॉन्ट आकार ही

इम यकीन नहीं कर सकते हैं, लेकिन मुझे लगता है कि है कि मैं क्या 'है पिछले

2

में जो किया गया है वह स्क्रीन रेंडर बॉक्स है जो आपको टेक्स्ट का सटीक आकार बताता है।

इसका मतलब है कि आपको उस सतह के बारे में जानकारी देना होगा जिस पर आप चित्रित कर रहे हैं और जिस स्ट्रिंग को आप चित्रित कर रहे हैं। इसका कारण यह है कि प्रणाली को देर से प्रतिपादन तक दृश्य परिणाम नहीं पता है। मैं प्रयोग किया है:

Graphics2D g; 
g.getFont().createGlyphVector(g.getFontRenderContext(),"abc").getVisualBounds(); 

तुम भी कोशिश कर सकते हैं:

Graphics2D g; 
g.getFont().getMaxCharBounds(g.getFontRenderContext()); 

मैं भी मुसीबत उन सभी फ़ॉन्ट तरीकों को सीधा रखने की है।

0

एक्स ऊंचाई का सवाल है, निम्नलिखित कोड मेरे लिए ठीक woks:

public double getXHeight(Font font) 
    { 
     FontRenderContext fc = new FontRenderContext(null, false, false); 
     TextLayout layout = new TextLayout("x", font, fc); 
     return layout.getBounds().getHeight(); 
    } 
+0

पैडेंटिक होने के लिए खेद है, लेकिन " एक्स "चरित्र एक टाइपफेस की एक्स-ऊंचाई के समान नहीं है। –

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