2014-11-22 5 views
5

Meine App ermöglicht dem Benutzer ein Bild zu bearbeiten. Das Bild wird in "Slices" bearbeitet: Der Benutzer wählt einen Teil des großen zu bearbeitenden Bilds aus (1), der Benutzer bearbeitet es (2, 3), und wenn der Benutzer fertig ist, wird das bearbeitete Slice über das Original zurückkopiert Bild (4). Sie können das vereinfachte Verfahren in der folgenden Abbildung sehen.drawBitmap auf Canvas mit einer transparenten Bitmap, ersetzen Sie die ursprünglichen Pixel

Sample workflow

  • die Scheibe zu bearbeiten, schaffe ich eine Bitmap des beschnittenen Bereich, der der einen der Benutzer Bearbeitungen (2,3) ist.

  • Wenn der Benutzer fertig ist, ich nur drawBitmap() die Scheibe in das Originalbild (4). Der Prozess ist komplexer, weil das Originalbild eine Transformationsmatrix hat, die ich invertieren muss usw., aber der Einfachheit halber reicht dies aus.

Das Problem entsteht, wenn der Benutzer einige Pixel in der Scheibe löscht (3). Ich kann keinen geeigneten PorterDuff/Paint Modus finden, so dass der bearbeitete Ausschnitt den Teil auf dem Originalbild ersetzt, sogar mit transparenten Pixeln. Was ich will, ist das Ergebnis dargestellt bei (4)

Meine beste Wette so weit zu bekommen, ist PorterDuff.SRC zu verwenden, aber wie Sie im Bild unten sehen, dreht sie das transparente Pixel Schwarz im Originalbild. Wenn ich die Farbe der Farbe auf Transparent einstelle, ist das gesamte Ergebnis schwarz.

mBlitPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); 
    mImageCanvas.drawBitmap(mArenaBitmap, invertedMatrix, mBlitPaint); 

Ich habe auch versucht SRC_OVER und sogar mImageCanvas.drawARGB (0xff,0,0,0), aber kein Glück. Im ersten Fall werden die transparenten Pixel einfach ignoriert. In der zweiten sind die transparenten Pixel schwarz lackiert.

Sample result

Antwort

0

ich auch dieses Problem gehabt haben und könnte eine Lösung nicht finden, zum Glück war meine Absicht, nur um etwas zu zeigen nicht wirklich um sie zu bearbeiten und speichern Sie es ... i verschiedenen Schichten verwendet und das schien zu Arbeit. aber wenn du eine lösung dazu findest würde ich gerne wissen wie du es gemacht hast

+0

leider sind verschiedene schichten keine option, das ist teil eines sehr komplexen edition programmes mit filtern, opengl, etc .. ich muss das lösen Problem, ohne zu viele Dinge zu ändern – rupps

Verwandte Themen