2011-06-01 21 views
11

FontMetrics不具有字體的cap heightx-height的獲取者。Java:你如何找出字體的高度和高度?

如何獲取這些值?

就帽高而言,不能保證特定大寫字母的字母上升與帽高相同。 (例如大寫字母H不能保證在頂部平坦)

就x高度而言,我認爲它是可能是與「x」的高度相同,但是再次沒有保證。


編輯:兒!我只是爲FontMetrics.getBounds()FontMetrics.getLineMetrics()對特定字符序列進行了嘗試,並且我總是得到相同的高度答案(顯然,getBounds()對寬度有所不同)。在hasUniformLineMetrics()方法中有一個關於fontmetrics的說明,它有幾種字體來覆蓋字符集,但涵蓋了字符組,而不是單個字符。

+0

有可能被用來獲取字體表,從而得到一個接口'java.awt.font.OpenType'由字體定義的'x-height'。然而,該接口並沒有被明顯地使用:http://stackoverflow.com/questions/33716004/how-do-i-use-the-opentype-in​​terface-in-java – HRJ 2015-11-15 04:45:07

回答

0

我還沒有使用它,但GlyphView.GlyphPainter類有getAscent,getDescentgetHeight方法。這可能是要檢查的東西。

0

好吧,如果你想使一個盒子,適合文本的文字,我覺得你可以使高度的字體大小本身

林不知道,但我認爲這就是我」已完成過去

2

你在找什麼是屏幕渲染框,告訴你文本的確切大小。

這意味着您需要提供某些關於您正在繪製的曲面和您正在繪製的字符串的信息。原因是該系統直到渲染後才知道視覺效果。我用:

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

你也可以試試:

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

我也有麻煩保持所有這些字體方法連勝。

0

在某高度,下面的代碼鑊對我罰款:

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

對不起,迂腐,但一個「 x「字符不一定與字體的x高度相同。 – 2014-07-10 16:44:45