2010-12-15 8 views
6

Beim Versuch, Bilder auf meiner SD-Karte zu skalieren, bemerkte ich, dass Originalfarben verändert wurden. Es scheint, dass BitmapFactory.decodeFile dafür verantwortlich ist. Hier ist ein Beispielcode:Android hat keinen Respekt vor Farben!

private void testImage() throws Exception{ 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inDither = false; 
    o.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    o.inScaled = false; 
    Bitmap b = BitmapFactory.decodeFile("/sdcard/test/original.jpg", o); 
    b.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream("/sdcard/test/result.jpg")); 
    b.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream("/sdcard/test/result.png")); 
} 

Ergebnissbilder (original.jpg, result.jpg, result.png):

alt textalt textalt text

hat, können Sie die Haut des Jungen sehen ist ein bisschen grün auf den 2 resultierenden Bildern. Irgendwelche Tipps, um dieses Problem zu lösen?

+0

FWIW, die drei Bilder sehen für mich identisch aus. – CommonsWare

+0

Ich sehe nicht wirklich einen Unterschied in Ihrem Png – schwiz

+0

FWIW, sehe ich einen Unterschied in den zweiten beiden im Vergleich zu den ersten :) –

Antwort

1

Woher wissen Sie, dass Ihre ursprünglichen Farben nicht grünlich waren?

Ihre Kamera/Ihr PC hat möglicherweise das Bild korrekt angezeigt, weil sie das Farbprofil der Kamera richtig angewendet haben. Dein Code hat es offensichtlich nicht getan.

Könnte das Problem dort sein? Versuchen Sie, das Bild auf einem anderen Gerät als Ihrer Kamera/Ihrem PC auszuprobieren.

+0

Der Unterschied, den ich zu zeigen versuche, liegt zwischen "original.jpg" und "result. *". Nicht so gut sichtbar nebeneinander, aber mit einem Bildbetrachter zwischen Bildern zu wechseln, wird offensichtlich. –