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

questionAnswers(2)

yourAnswerToTheQuestion