Rotacionar uma única imagem!

5 respostas
C

Olá! Estou tentando rotacionar uma imagem em um panel. Achei que era só criar uma opção de rotação antes do drawImage, mas ele acaba girando tudo!
Como que eu faço para rotacionar só a imagem?

Aqui está uma pequena parte do código, com a mudança do angulo e dando drawImage:
//g2 é um Graphics 2D
                //canhao é a imagem

                g2.translate(445/2-10, 505);
                g2.rotate(angulo.getValue());
                g2.translate(-(445/2-10), -505);
                g2.drawImage(canhao, 445/2-40, 434, this);

5 Respostas

V

Crie uma cópia do contexto gráfico:

Graphics2D g2d = g2.create(); g2d.translate(445/2-10, 505); g2d.rotate(angulo.getValue()); g2d.translate(-(445/2-10), -505); g2d.drawImage(canhao, 445/2-40, 434, this); g2d.dispose();

No meu site, dê uma lida no artigo “Uma introdução rápida sobre o Java 2D” para entender isso melhor, e veja um exemplo prático no artigo “O fantasma do Pacman”.

C

Funcionou! =D

Outra pergunta rapidão!!!
Em que escala está o rotate?
2pi = 1 rotação?

V

Está em radianos, como todas as funções do Math.
2pi = 360º

Lembre-se. Esses métodos afetam o sistema de coordenadas, não a imagem.
Ou seja, quando vc dá um rotate, vc está rodando o eixo x e y. Por consequencia, tudo que é desenhado sobre esse eixo, será rotacionado também. O mesmo vale para os métodos translate, shear e scale.

Leia o artigo do pacman que vc vai entender melhor.

B

Eu estou com um problema nesse mesmo negocio.

Fiz o codigo no mesmo estilo e não desenha.

int Meiox = img.getWidth()/2;
		int Meioy = img.getHeight()/2;

		// dbg é Graphics2D tambem
		Graphics2D dbg2 =  (Graphics2D) dbg.create();

		dbg2.translate(Meiox, Meioy);
		dbg2.rotate(currentAngle, Meiox,Meioy);
		dbg2.translate(Meiox, Meioy);
		dbg2.drawImage(img, (int)X-mapx, (int)Y-mapy, (ImageObserver) this);
		dbg2.dispose();

Alguem pode me ajudar? Fiz a mesma coisa e não desenha a imagem que quero. Comigo não funcionou, o que pode ser?

B

Ah… nem precisa mais, consegui resolver o problema…

Criado 23 de dezembro de 2009
Ultima resposta 29 de jan. de 2010
Respostas 5
Participantes 3