2010-07-27 2 views
2

В настоящее время у меня есть текстовый объект, который мне нужен, чтобы определить его границы. Я использовал графический объект для получения метрик шрифта текста, который я пытаюсь нарисовать, но поскольку я добавил функциональность для вращения объекта (и, возможно, больше), мне нужен лучший способ получить границы этого объекта. Я посмотрел несколько мест, и с тех пор на меня все еще не работало. Вот моя самая последняя попытка:Как получить ограничительную рамку преобразованного текста (java)?

//This is the bounding box edges 0: left, 1: right 2: top 3: bottom 
int toReturn[] = new int[4]; 
//this.transform is the AffineTransform for the text Object(currently only 
//rotated) 
FontRenderContext frc = new FontRenderContext(this.transform,true,false); 
TextLayout tl = new TextLayout(this.typedText,this.font,frc); 
Rectangle2D bb = tl.getBounds(); 
toReturn[0] = (int)(bb.getX()); 
toReturn[1] = (int)(bb.getX()+bb.getWidth()); 
toReturn[2] = (int)(bb.getY()); 
toReturn[3] = (int)(bb.getY()+bb.getHeight()); 

Это правильный способ получить ограничительную рамку для преобразованного текста?

+0

Переформатированный код; пожалуйста, верните, если это неверно. – trashgod

ответ

1

Нет, AffineTransform, предоставленный для FontRenderContext "используется для масштабирования опечаток в пикселях в этом FontRenderContext." Вы должны иметь возможность использовать createTransformedShape() на границе, чтобы получить нужный результат.

+0

Спасибо за ответ (и редактирование), я не уверен, как правильно отформатировать мой код в этом ответе, поэтому я извиняюсь, но если я правильно понимаю, что это то, что вы имеете в виду: Форма shape = transform.createTransformedShape (" некоторая форма "); Единственный вопрос, который у меня будет сейчас, - это какая форма будет предоставлена ​​этому методу? tl.getBounds()? – heater

+0

@heater: Да, 'tl.getBounds()' или 'font.getStringBounds()'; это очень удобно для 'contains()' testing. Если вам нужны сами преобразованные координаты, используйте один из методов 'transform()' AffineTRansform'. BTW, используйте обратные тики для встроенного кода; отступ четвертый для кодовых списков. – trashgod

+0

спасибо за быстрый ответ и информацию о встроенном коде, это, похоже, работает, как я хочу это :) – heater

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