2017-07-28 61 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])); 
} 

然而,当我查看输出图像文件,它们都显示为负值。 (我希望我可以在这里附上图片)有人指出我在哪里做错了?

感谢,

亚历

+0

很可能你会发现问题在于你的JPEG存储为带alpha通道的RGB,而且大多数软件都将其解释为CMYK(即“反转”或“负”颜色)。尝试将一个显式目标(而不是'null')传递给'op.filter(...)',并确保这是一个'TYPE_3BYTE_BGR'或'TYPE_INT_RGB'图像。 – haraldK

+0

谢谢@haraldk,我找到了解决方案,但不知道为什么。现在我明白了为什么:) – user1941319

回答

0

像@ haraldk的评论,结果图像传递给AffineTransformOp.filter功能,而不是使用空。阅读@ haraldk的解释评论。

问候。