У меня есть изображение, и я должен повернуть его на 45, 90, 135, 180 градусов. Что я делаю:AffineTransform усекает изображение
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();
}
Проблема заключается в том, что изображение меняет свое положение и выходит из пределов конечного изображения:
The problem http://img32.imageshack.us/img32/3328/resultcs.png
Я гугле это и нашел решение в этом вопросе : AffineTransform truncates image, what do I wrong? Но я совершенно не понимаю, и это работает только для квадрантов. Я пытался умножить в два раза ширину и высоту назначения, но это не удалось:
Another fail http://img401.imageshack.us/img401/2417/result2a.png
Как это исправить? На целевом изображении не должно быть никаких дополнительных (за исключением необходимости для диагонального вращения) пробелов или усеченной области. Угловые проблемы (0 == 180 или по часовой стрелке) не важны.
Спасибо за любую помощь.
Как насчет дополнительного пространства по диагонали на 45 и 135? Должна быть прозрачной? 180 идентично 0? Пожалуйста, отредактируйте свой вопрос, чтобы включить [sscce] (http://sscce.org/), который показывает проблему, которую вы описываете. ['FauxImage'] (http://stackoverflow.com/a/8090328/230513) может быть удобным дополнением. – trashgod
У меня есть пример и фотографии, которые иллюстрируют проблему. Код готов к запуску. – Cenius