私の問題は単純です。AffineTransform を実行した後、画像が適切に保存されません (ただし、JPanel では適切に描画されます!)。それは本当に奇妙ですので、ヒントは本当にありがたいです...
コードを見てください:
public BufferedImage performRotation(BufferedImage bi){
if (angle!=180){
at.translate(0.5*bi.getHeight(), 0.5*bi.getWidth());
if(clockwise){
at.rotate(Math.toRadians(angle));
}else{
at.rotate(Math.toRadians(-angle));
}
at.translate(-0.5*bi.getWidth(), -0.5*bi.getHeight());
}
else if(angle==180){
at.translate(0.5*bi.getWidth(), 0.5*bi.getHeight());
at.rotate(Math.toRadians(angle));
at.translate(-0.5*bi.getWidth(), -0.5*bi.getHeight());
}
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
BufferedImage bi2 = op.filter(bi, null);
try {
ImageIO.write(bi, "bmp", new File("BEFORE filterORIG.bmp"));
ImageIO.write(bi2, "bmp", new File("AFTER filterNEW.bmp"));
} catch (IOException ex) {
Logger.getLogger(DrawingField.class.getName()).log(Level.SEVERE, null, ex);
}
ファイル BEFORE filterORIG が適切に保存されます -> 画像はありますが、事前に回転されています。
File AFTER... は空のファイルとして保存されます。
本当に興味深いのは、この変換がディスプレイとして使用する JPanel によく表示されるという前述の事実です (目的の変換の効果を観察できます)。
助けていただければ幸いです...