簡體   English   中英

Java:如何找出字體的大寫高度和 x 高度?

[英]Java: how do you find out the cap height and x-height of a font?

FontMetrics沒有字體的大寫高度x 高度的吸氣劑。

我怎樣才能獲得這些值?

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

就 x 高度而言,我認為它可能與“x”的高度相同,但同樣不能保證。


編輯:Grr! 我剛剛為特定的字符序列嘗試了FontMetrics.getBounds()FontMetrics.getLineMetrics() ,而且我總是得到相同的高度答案(getBounds() 顯然對於寬度確實不同)。 hasUniformLineMetrics()方法中有一條關於字體度量的注釋,該字體度量有幾個 fonts 來覆蓋字符集,但它涵蓋了字符組,而不是單個字符。

您正在尋找的是屏幕渲染框,它告訴您文本的確切大小。

這意味着您需要在某些時候提供有關您正在繪制的表面和正在繪制的字符串的信息。 原因是系統直到渲染后期才知道視覺結果。 我用了:

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

你也可以試試:

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

我也很難保持所有這些字體方法的正確性。

好吧,如果你想用適合文本的文本制作一個框,我認為你可以將高度設置為字體大小本身

我不確定,但我認為這是我過去所做的

至於 x 高度,以下代碼對我來說很好:

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

我沒有使用過它,但GlyphView.GlyphPainter class 有getAscentgetDescentgetHeight方法。 這可能是要檢查的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM