2 Stimmen

Bild-Farbkorrektur in Android-Java

Ich schreibe ein Programm, das es dem Benutzer ermöglicht, 2 Fotos zu vergleichen, eines als Farbmuster und das andere zur Bearbeitung. Ich werde Pixel-Informationen aus dem ersten sammeln und dann die folgende Methode anwenden, um das zweite zu bearbeiten.

Das Ergebnis ist ein Foto: http://www.flickr.com/photos/92325795@N02/8392038944/in/photostream

Mein Foto wird aktualisiert und trotz der Qualität / Rauschen / Farbe, aber es gibt die seltsamen Farben hier und da. Hat jemand eine Idee, was ich tun sollte, um es zu entfernen? Oder noch besser die Methode verbessern, die ich verwende? Hier ist der Code:

Die Eingabe ist die zu bearbeitende Bitmap, inColor ist die Farbe der Nase auf dem zu bearbeitenden Foto, reqcolor ist die Farbe meiner Nase auf dem Beispiel-/Optimalfoto.

public Bitmap shiftRGB(Bitmap input, int inColor, int reqColor){

    int deltaR = Color.red(reqColor) - Color.red(inColor);
    int deltaG = Color.green(reqColor) - Color.green(inColor);
    int deltaB = Color.blue(reqColor) - Color.blue(inColor);

    //--how many pixels ? --
    int w = input.getWidth();
    int h = input.getHeight();

    //-- change em all! --
    for (int i = 0 ; i < w; i++){
        for (int  j = 0 ; j < h ; j++ ){
            int pixColor = input.getPixel(i,j);

            //-- colors now ? --
            int inR = Color.red(pixColor);
            int inG = Color.green(pixColor);
            int inB = Color.blue(pixColor);

            if(inR > 255){ inR = 255;}
            if(inG > 255){ inG = 255;}
            if(inB > 255){ inB = 255;}
            if(inR < 0){ inR = 0;}
            if(inG < 0){ inG = 0;}
            if(inB < 0){ inB = 0;}

            //-- colors then --
            input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB           + deltaB));
        }
    }

    return input;

} Vielen Dank, dass Sie mir geholfen haben! Ich kann meine Dankbarkeit nicht weiter ausdrücken als ein weiteres Dankeschön im Voraus zu sagen!

1voto

WLin Punkte 1344

Die Funktion scheint wie erwartet zu funktionieren.

Eine Sache, die mir jedoch auffällt, ist, dass Sie Ihre "if"-Fälle zur Überprüfung der Grenzen setzen, BEVOR Sie die endgültige Ausgabe des neuen Pixels tatsächlich festlegen.

        if(inR > 255){ inR = 255;}
        if(inG > 255){ inG = 255;}
        if(inB > 255){ inB = 255;}
        if(inR < 0){ inR = 0;}
        if(inG < 0){ inG = 0;}
        if(inB < 0){ inB = 0;}
        input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB + deltaB));

Ich glaube, das ist genau das, was Sie versuchen zu tun.

        inR += deltaR
        inG += deltaG
        inB += deltaB
        if(inR > 255){ inR = 255;}
        if(inG > 255){ inG = 255;}
        if(inB > 255){ inB = 255;}
        if(inR < 0){ inR = 0;}
        if(inG < 0){ inG = 0;}
        if(inB < 0){ inB = 0;}
        input.setPixel(i,j,Color.argb(255,inR,inG,inB));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X