AffineTransform обрезает изображение
У меня есть изображение, и я должен повернуть его на 45, 90, 135, 180 градусов. Что я делаю
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();
}
Проблема в том, что изображение меняет свою позицию и выходит за пределы целевого изображения:
Проблема http://img32.imageshack.us/img32/3328/resultcs.pn
Я нашел это в Google и нашел решение в этом вопросе:AffineTransform обрезает изображение, что я не так делаю? Но я совсем не понимаю, и это работает только для квадрантов. Я попытался умножить вдвое ширину и высоту места назначения, но это не удалось:
Еще один сбой http://img401.imageshack.us/img401/2417/result2a.pn
Как это исправить? На целевом изображении не должно быть лишних (кроме необходимых для диагонального вращения) пробелов или усеченных областей. Проблемы с углом (0 == 180 или по часовой стрелке) не важны.
Спасибо за любую помощь.