2014-10-17 2 views
0

Первый «foo» является нормальным, но второй настолько огромен, что я могу видеть только базу «f». Размер шрифта по умолчанию.Graphics2D - текст ОГРОМНЫЙ в масштабированном координатном пространстве

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.

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

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

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

+1

Каков тип и значение 'length'? – megadan

+0

Значение @megadan может быть где угодно от '2' до' 1000', целых чисел – necromancer

+0

Вы теряете дробную часть, разделив два целых числа вместо float или double. – megadan

ответ

2

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

public Font deriveFont(float size) 

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

+0

УДИВИТЕЛЬНЫЙ! Спасибо :) +1 и принят. – necromancer

Смежные вопросы