Por que o Java ImageIO nivela as cores JPEG

Quando eu leio certos arquivos JPG, as cores são achatadas. Aqui está um exemplo simples que lê um jpg e apenas grava a mesma imagem em outro arquivo.

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class JPegReadTest {
    public static void main(String[] args) {
        if (args.length == 2) {
            try {
                BufferedImage src = ImageIO.read(new File(args[0]));
                ImageIO.write(src, "jpg", new File(args[1]));
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.err.println("Usage: java JPegReadTest src dest");
        }
    }
}

Se você tentar isso com, por exemplohttp://www.flickr.com/photos/visualpanic/233508614/sizes/l/ , as cores da imagem de destino diferem do arquivo de origem. Por que é que? Como corrigi-lo?

Também tentei salvar a imagem como png, mas as cores são suaves também (supondo que as informações de cores não sejam lidas corretamente).

questionAnswers(5)

yourAnswerToTheQuestion