el color de la imagen jpeg cambia drásticamente solo después de ImageIO.read () y ImageIO.write ()

He estado usando los métodos ImageIO.read () e ImageIO.write () en javax.imageio.ImageIO para leer y escribir imágenes, y descubrí que el color de algunas imágenes cambia extrañamente.

Incluso si cambio mi código para no hacer nada, solo leer las imágenes y escribirlas (con jpeg, png, gif), todas esas nuevas imágenes tienen el mismo problema.

¿Debo agregar algún otro código antes / después de los métodos ImageIO.read/write?

Aquí está el código que utilicé:

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

Mi entorno:

    java version "1.6.0_35"
    MacOSX 10.8.2

Imagen original:

Una de las imágenes después de leer y escribir:

Respuestas a la pregunta(2)

Su respuesta a la pregunta