Поворот одного изображения под другим - PullRequest
1 голос
/ 08 октября 2011

В настоящее время я пытаюсь повернуть изображение, а затем нарисовать изображение сверху, которое не вращается. Но всякий раз, когда я использую: g2d.rotate(Math.toRadians(rot), (x+15), (y+15)); каждое изображение, которое я рисую потом, тоже вращается. Есть ли способ, которым я могу повернуть одно изображение, а не повернуть остальные (черт возьми, это действительно трудно объяснить). Вот мой метод рисования:

public void draw(Graphics2D g2d)
{
    move();
    if(bo.px==+1)rot--;
    if(bo.px==-1)rot++;
    g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
    g2d.drawImage(img, x, y, null);//this should rotate
    g2d.drawImage(shine, x, y, null);//this shouldn't
}

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 08 октября 2011

Вы можете сохранить исходное преобразование, повернуть и нарисовать первое изображение, а затем применить исходное преобразование перед рисованием второго изображения.

Попробуйте

AffineTransform originalTransform = g2d.getTransform();
g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
g2d.drawImage(img, x, y, null);
g2d.setTransform(originalTransform);
g2d.drawImage(shine, x, y, null);
1 голос
/ 08 октября 2011

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

public void draw(Graphics2D g2d)
{
    move();
    if(bo.px==+1)rot--;
    if(bo.px==-1)rot++;
    g2d.rotate(Math.toRadians(rot), (x+15), (y+15));
    g2d.drawImage(img, x, y, null);//this should rotate
    g2d.rotate(-Math.toRadians(rot), (x+15), (y+15)); // this resets the rotation!
    g2d.drawImage(shine, x, y, null);//this shouldn't
}
...