Graphics2D - текст огромен в масштабированном координатном пространстве

Первый "foo" нормален, но второй настолько огромен, что я вижу только основание "f". Размер шрифта является значением по умолчанию.

    BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();
    Shape ellipse = new Ellipse2D.Double(0, 0, 1.0, 1.0);
    g2.setPaint(Color.RED);
    g2.drawString("foo", 100, 100);
    g2.scale(500.0f / length, 500.0f / length);
    g2.drawString("foo", 1, 1);

Изменение размера шрифта не поможет, поскольку позволяет int размеры и размер, который будет иметь смысл для масштаба, что-то вроде 0.02,

Причина, по которой мне нужно рисовать текст в масштабированном пространстве, заключается в том, что я рисую сетку узлов и хочу масштабировать координаты до количества узлов в каждом измерении. Таким образом, мне не нужно делать сложные вычисления.

Мне нужен текст для обозначения краев.

Обновление: я могу получать текст, выполняя следующую последовательность каждый раз, когда я хочу нарисовать текст: сохранение преобразования, перевод в нужное место в масштабированном пространстве, масштабирование, рисование текста в (0, 0)и восстановление преобразования.

1 ответ

Решение

Вы можете использовать метод Font

public Font deriveFont(float size)

получить желаемый размер шрифта шрифта. Угадай, что 0,02 будет хорошо.

Другие вопросы по тегам