Java: как узнать высоту колпачка и высоту х шрифта? - PullRequest
11 голосов
/ 01 июня 2011

FontMetrics не имеет геттеров для высоты колпачка и x-height шрифта.

Как я могуполучить эти значения?

Что касается высоты колпачка, для конкретной заглавной буквы нет гарантии, что подъем буквы такой же, как высота колпачка.(например, заглавная буква H не обязательно будет плоской сверху)

Что касается высоты x, я предполагаю, что она , вероятно, такая же, как высота "x",но опять же, нет никакой гарантии.


edit : Grr!Я только что попробовал FontMetrics.getBounds() и FontMetrics.getLineMetrics() для определенных последовательностей символов, и я всегда получаю один и тот же ответ для высот (getBounds () действительно отличается для ширины, очевидно).В методе hasUniformLineMetrics() есть примечание о том, что у fontmetrics есть несколько шрифтов для покрытия набора символов, но это касается групп символов, а не отдельных символов.

Ответы [ 4 ]

4 голосов
/ 06 мая 2012

То, что вы ищете, это окно визуализации экрана, которое сообщает вам точный размер текста.

Это означает, что в какой-то момент вам нужно будет предоставить информацию о поверхности, на которой вы рисуете, и строке, которую вы рисуете. Причина в том, что система просто не знает визуальный результат до поздней визуализации. Я использовал:

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

Вы также можете попробовать:

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

У меня тоже проблемы с прямыми методами шрифта.

0 голосов
/ 10 июля 2014

Что касается x-height, то для меня отлично работает следующий код:

    public double getXHeight(Font font)
    {
        FontRenderContext fc = new FontRenderContext(null, false, false);
        TextLayout layout = new TextLayout("x", font, fc);
        return layout.getBounds().getHeight();
    }
0 голосов
/ 06 мая 2012

Ну, если вы пытаетесь создать коробку с текстом, который соответствует тексту, я думаю, вы можете просто сделать высоту самого размера шрифта

Я не уверен, но я думаю, что это то, что ясделано в прошлом

0 голосов
/ 18 июня 2011

Я не работал с ним, но класс GlyphView.GlyphPainter имеет методы getAscent, getDescent и getHeight.Это может быть что-то, чтобы проверить.

...