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
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.
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