A cor da imagem jpeg é alterada drasticamente depois de apenas ImageIO.read () e ImageIO.write ()

Eu tenho usado os métodos ImageIO.read () e ImageIO.write () em javax.imageio.ImageIO para ler e escrever imagens, e descobri que algumas cores das imagens são alteradas de forma estranha.

Mesmo que eu mude meu código para não fazer nada além de apenas ler imagens e escrevê-las (com jpeg, png, gif), todas essas novas imagens têm o mesmo problema.

Preciso adicionar algum outro código antes / depois dos métodos ImageIO.read/write?

Aqui está o código que usei:

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

Meu ambiente:

    java version "1.6.0_35"
    MacOSX 10.8.2

Imagem original:

Uma das imagens depois de ler e escrever:

questionAnswers(2)

yourAnswerToTheQuestion