Spec-Zone .ru
спецификации, руководства, описания, API
След: 2-D Графика
Урок: Усовершенствованные Темы в Java2D
Преобразовывая Формы, текст, и Изображения
Домашняя страница > 2-D Графика > Усовершенствованные Темы в Java2D

Преобразовывая Формы, текст, и Изображения

Можно изменить атрибут преобразования в Graphics2D контекст, чтобы переместиться, поверните, масштабируйте, и сдвиньте графические примитивы, когда они представляются. Атрибут преобразования определяется экземпляром AffineTransform class. Аффинное преобразование является преобразованием те, которые преобразовывают, вращаются, масштабируются, или сдвиг, в котором параллельные строки остаются параллельными, даже будучи преобразованным.

Graphics2D class обеспечивает несколько методов для того, чтобы они изменили атрибут преобразования. Можно создать новое AffineTransform и изменение Graphics2D преобразуйте атрибут, вызывая transform.

AffineTransform определяет следующие методы фабрики, чтобы облегчить создавать новые преобразования:

Альтернативно можно использовать один из Graphics2D методы преобразования, чтобы изменить текущее преобразование. Когда Вы вызываете один из этих методов удобства, получающееся преобразование связывается с текущим преобразованием и применяется во время рендеринга:

Можно также создать AffineTransform возразите непосредственно и свяжите это с текущим преобразованием, вызывая transform метод.

drawImage метод также перегружается, чтобы позволить Вам определять AffineTransform это применяется к изображению, поскольку оно представляется. Определение преобразования, когда Вы вызываете drawImage не влияет Graphics2D преобразуйте атрибут.

Пример: Преобразовать

Следующая программа является тем же самым как StrokeandFill, но также и позволяет пользователю выбирать преобразование, чтобы примениться к выбранному объекту, когда он представляется.


Отметьте:  

Если Вы не видите, что апплет работает, Вы должны установить выпуск 6 (или позже) Java Комплект разработчика SE (JDK).


Transform.java содержит полный код для этого апплета.

Когда преобразование выбирается из меню Transform, преобразование связывается на AffineTransform at:

public void setTrans(int transIndex) {
    // Sets the AffineTransform.
    switch ( transIndex ) {
    case 0 :
        at.setToIdentity();
        at.translate(w/2, h/2);
        break;
    case 1 :
        at.rotate(Math.toRadians(45));
        break;
    case 2 :
        at.scale(0.5, 0.5);
        break;
    case 3 :
        at.shear(0.5, 0.0);
        break;
    }
}

Прежде, чем вывести на экран форму, соответствующую пунктам меню, приложение сначала получает текущее преобразование от Graphics2D объект:

AffineTransform saveXform = g2.getTransform();

Это преобразование будет восстановлено Graphics2D после рендеринга.

После получения текущего преобразования, другого AffineTransform, toCenterAt, создается, что причины формируют, чтобы быть представленными в центре панели. at AffineTransform связывается на toCenterAt:

AffineTransform toCenterAt = new AffineTransform();
toCenterAt.concatenate(at);
toCenterAt.translate(-(r.width/2), -(r.height/2));

toCenterAt преобразование связывается на Graphics2D преобразуйте с transform метод:

g2.transform(toCenterAt);

После того, как рендеринг завершается, исходное преобразование восстанавливается, используя setTransform метод:

g2.setTransform(saveXform);

Отметьте: Никогда не используйте setTransform метод, чтобы связать координатное преобразование на существующее преобразование. setTransform метод перезаписывает Graphics2D текущее преобразование объекта, которое могло бы быть необходимо по другим причинам, таким как расположение Swing и легких компонентов в окне. Используйте эти шаги, чтобы выполнить преобразования:
  1. Используйте getTransform метод, чтобы получить текущее преобразование.
  2. Использовать transform, translate, scale, shear, или rotate связать преобразование.
  3. Выполните рендеринг.
  4. Восстановите исходное преобразование, используя setTransform метод.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Усовершенствованные Темы в Java2D
Следующая страница: Отсечение Области Рисунка