Fala galera, seguinte: to fazendo o programa universo pessoal rotacionar imagens e tal, mas o problema é que as imagens perdem a qualidade depois da rotação: saca só os resultados:
Antes de rotacionar:
[IMG]http://img6.imagebanana.com/img/ssfrx3gw/thumb/teste1.png[/IMG]
Depois de rotacionar:
[IMG]http://img6.imagebanana.com/img/saf7ro3h/thumb/teste2.png[/IMG]
De longe tá lindo, mas deêm um zoom pra você verem a diferença.
@Override
public Desenho rotacionar(Dimension tamanho) {
// TODO Auto-generated method stub
AffineTransform af = new AffineTransform();
af = new AffineTransform(0,1,-1,0,tamanho.getHeight(),0);
Point2D origem = af.transform(new Point2D.Float(this.getOrigemX(), this.getOrigemY()), null);
Point2D fim = af.transform(new Point2D.Float(this.getFimX(), this.getFimY()), null);
this.setFimX((int) fim.getX())
.setFimY((int)fim.getY())
.setOrigemX((int)origem.getX())
.setOrigemY((int)origem.getY());
//esse é o código onde eu aplico as tranformações
af.setToRotation(90*Math.PI/180, this.imagem.getWidth(null)/2, this.imagem.getHeight(null)/2);
BufferedImage novaImagem = new BufferedImage(this.imagem.getWidth(null), this.imagem.getHeight(null), BufferedImage.TYPE_USHORT_565_RGB);
Graphics2D g = (Graphics2D) novaImagem.getGraphics().create();
g.transform(af);
af.setToIdentity();
AffineTransform afGeral = new AffineTransform();
afGeral.translate(this.imagem.getWidth(null)/2, this.imagem.getHeight(null)/2);
afGeral.scale(this.imagem.getHeight(null)/((float)this.imagem.getWidth(null)), this.imagem.getWidth(null)/((float)this.imagem.getHeight(null)));
afGeral.translate(-this.imagem.getWidth(null)/2, -this.imagem.getHeight(null)/2);
g.drawImage( this.imagem,afGeral, null);
g.dispose();
this.setImagem(novaImagem.getSubimage(0, 0, this.imagem.getWidth(null), this.imagem.getHeight(null)));
return this;
}
Tem como eu melhorar isso usando aquela classe do AffineTransformOp? Se sim como?, Obrigado desde já.