Цвет изображения jpeg радикально меняется после использования только ImageIO.read () и ImageIO.write ()

Я использовал методы ImageIO.read () и ImageIO.write () в javax.imageio.ImageIO для чтения и записи изображений, и обнаружил, что цвет некоторых изображений меняется странным образом.

Даже если я изменю свой код, чтобы он ничего не делал, а просто читал изображения и записывал их (с помощью jpeg, png, gif), все эти новые изображения имеют ту же проблему.

Нужно ли добавлять какой-либо другой код до / после методов ImageIO.read/write?

Вот код, который я использовал:

    File f = new File("obw.jpg");
    BufferedImage bi = ImageIO.read(f);
    FileOutputStream fos2 = new FileOutputStream("obw2.jpg");
    ImageIO.write(bi, "JPG", fos2);
    FileOutputStream fos3 = new FileOutputStream("obw3.gif");
    ImageIO.write(bi, "GIF", fos3);
    FileOutputStream fos4 = new FileOutputStream("obw4.png");
    ImageIO.write(bi, "PNG", fos4);

Моя среда:

    java version "1.6.0_35"
    MacOSX 10.8.2

Исходное изображение:

Одно из изображений после чтения и записи:

Ответы на вопрос(2)

Ваш ответ на вопрос