AffineTransform trunca imagem
Tenho uma imagem e preciso girá-la em 45, 90, 135, 180 graus. O que estou fazendo:
try {
BufferedImage src = ImageIO.read(new File("src.png"));
double ang = Math.toRadians(90);
AffineTransform t = new AffineTransform();
t.setToRotation(ang, src.getWidth() / 2, src.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(t, null);
BufferedImage dst = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
op.filter(src, dst);
ImageIO.write(dst, "png", new File("output.png"));
} catch(Exception ex) { ex.printStackTrace();
}
O problema é que a imagem muda de posição e sai dos limites da imagem de destino:
The problem http://img32.imageshack.us/img32/3328/resultcs.pn
Eu pesquisei isso no Google e encontrei a solução nesta pergunta:AffineTransform trunca a imagem, o que estou errado? Mas eu não entendo e funciona apenas para quadrantes. Tentei multiplicar duas vezes a largura e a altura do destino, mas falhou:
Outra falha http://img401.imageshack.us/img401/2417/result2a.pn
Como consertar isto? A imagem de destino não deve ter nenhum espaço em branco extra (exceto o necessário para rotação diagonal) ou área truncada. Problemas de ângulo (0 == 180 ou é no sentido horário) não são importante
Obrigado por qualquer ajuda