2017-07-28 3 views
0

Ich brauche ein JPG-Bild zu drehen, so dass ich diese Funktion schrieb:Java BufferedImage Drehen

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); 
} 

ich sie ImageIO verwenden, um das Bild aus einer Datei zu lesen und schreiben:

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])); 
} 

Allerdings, wenn ich sehe die Ausgabebilddateien erscheinen alle als negativ. (Ich wünschte, ich könnte die Bilder hier anhängen) Kann jemand darauf hinweisen, wo ich falsch liege?

Danke,

Alex

+0

Wahrscheinlich werden Sie feststellen, dass das Problem darin besteht, dass Ihre JPEGs als RGB mit Alphakanal gespeichert sind, und die meisten Software dies als CMYK interpretiert (also die "invertierten" oder "negativen" Farben). Versuchen Sie, ein explizites Ziel (anstelle von "null") an "op.filter (...)" zu übergeben und stellen Sie sicher, dass es sich um ein Image vom Typ "TYPE_3BYTE_BGR" oder "TYPE_INT_RGB" handelt. – haraldK

+0

Dank @haraldk, fand ich die Lösung, wusste aber nicht warum. Jetzt verstehe ich warum :) – user1941319

Antwort

0

Wie @ haraldk Kommentar, übergeben Sie das Ergebnis Bild AffineTransformOp.filter Funktion statt null zu verwenden. Lies @ Haraldks Kommentar für eine Erklärung.

Grüße.