2017-07-28 26 views
0
私は、この関数を書いたように、のjpg画像を回転させる必要がある

のJavaのBufferedImage回し

BufferedImage rotate(BufferedImage bufferedImage) { 
    AffineTransform tx = new AffineTransform(); 
    tx.rotate(Math.PI/2.0, bufferedImage.getWidth()/2, bufferedImage.getHeight()/2); 

    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 
    return op.filter(bufferedImage, null); 
} 

私はそれらをファイルから画像を読み書きするImageIOでを使用します。

String [] photos = { "IMG_1998.JPG" , "IMG_1999.JPG" ,"IMG_2001.JPG" ,"IMG_2002.JPG" ,"IMG_2003.JPG"}; 

for(int i=0; i<photos.length-1; i++) { 
    BufferedImage nextImage = rotate(ImageIO.read(new File("d:/gif/" + photos[i]))); 
    ImageIO.write(nextImage, "JPG", new File("d:/gif/A_" + photos[i])); 
} 

しかし、私が見たときに出力イメージファイル、それらはすべて陰性として表示されます。 (私はここに画像を添付することができればいいと思う)誰かが間違ってどこを指すことができますか?

おかげで、

アレックス@ haraldkさんのコメントのように

+0

ほとんどの場合、あなたのJPEGはアルファチャンネル付きのRGBとして保存されており、ほとんどのソフトウェアはこれをCMYK(したがって、 "反転"または "ネガティブ"の色)として解釈します。明示的な宛先( 'null'ではなく)を' op.filter(...) 'に渡して、これが' TYPE_3BYTE_BGR'または 'TYPE_INT_RGB'画像であることを確認してください。 – haraldK

+0

ありがとう@haraldk、私は解決策を見つけたが、理由を知らなかった。今私は理由を理解する:) – user1941319

答えて

0

は、代わりにnullを使用してのAffineTransformOp.filter関数に結果画像を渡します。説明については、@ haraldkのコメントを読んでください。

よろしくお願いいたします。