kolor obrazu JPEG zmienia się drastycznie po ImageIO.read () i ImageIO.write ()

Używałem metod ImageIO.read () i ImageIO.write () w javax.imageio.ImageIO do odczytu i zapisu obrazów, i odkryłem, że niektóre obrazy zmieniają się dziwnie.

Nawet jeśli zmienię kod, aby nic nie robić, ale tylko czytać obrazy i je zapisywać (z jpeg, png, gif), wszystkie te nowe zdjęcia mają ten sam problem.

Czy muszę dodać inny kod przed / po metodach ImageIO.read/write?

Oto kod, którego użyłem:

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

Moje środowisko:

    java version "1.6.0_35"
    MacOSX 10.8.2

Oryginalny obraz:

Jeden z obrazów po przeczytaniu i napisaniu:

questionAnswers(2)

yourAnswerToTheQuestion