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 будет хорошо.