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]));
}
然而,当我查看输出图像文件,它们都显示为负值。 (我希望我可以在这里附上图片)有人指出我在哪里做错了?
感谢,
亚历
很可能你会发现问题在于你的JPEG存储为带alpha通道的RGB,而且大多数软件都将其解释为CMYK(即“反转”或“负”颜色)。尝试将一个显式目标(而不是'null')传递给'op.filter(...)',并确保这是一个'TYPE_3BYTE_BGR'或'TYPE_INT_RGB'图像。 – haraldK
谢谢@haraldk,我找到了解决方案,但不知道为什么。现在我明白了为什么:) – user1941319