Получите полную ширину строки, отображаемой произвольным шрифтом .ttf в Java Graphics 2. - PullRequest
2 голосов
/ 28 сентября 2011

В настоящее время мы пытаемся получить ширину строки, отображаемой произвольным шрифтом.

BufferedImage img = new BufferedImage(10, 10, BufferedImage.TRANSLUCENT);
    img.createGraphics();
    Graphics2D g = (Graphics2D) img.getGraphics();
    g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);


    FontMetrics metrics = g.getFontMetrics(font);
    // get the height of a line of text in this font and render context
    int hgt = metrics.getHeight();
    // get the advance of my text in this font and render context
    int adv = metrics.stringWidth(text);
    // calculate the size of a box to hold the text with some padding.
    //Dimension dim = new Dimension(adv + 2, hgt + 2);

Проблема с этой строкой ...

 int adv = metrics.stringWidth(text);

Для большинства шрифтов это работает, но для некоторых причудливых шрифтов сценариев кажется, что они оказываются менее широкими, чем мы ожидали. В соответствии с Javadoc для FontMetrics.stringWidth вы даже можете прочитать ...

Возвращает общую ширину продвижения для отображения указанной строки в этот шрифт. Прогресс - это расстояние от крайней левой точки до крайняя правая точка на базовой линии Обратите внимание, что продвижение Строка не обязательно является суммой достижений ее символов .

...