我的應用程序允許用戶編輯圖像。圖像在「切片」中編輯:用戶選擇要編輯的大圖像的一部分(1),用戶編輯它(2,3),然後當用戶完成時,編輯的切片被複制回原始圖像(4)。您可以在下圖中看到簡化的過程。drawBitmap使用透明位圖繪製,替換原始像素
要編輯切片,創建所剪切區域的位圖,這是一個用戶編輯(2,3)。
當用戶完成後,我只需將
drawBitmap()
切片放入原圖(4)。這個過程比較複雜,因爲原始圖像有一個變換矩陣,我必須倒置等,但爲了簡單起見,這就足夠了。
當用戶在切片(3)清除一些像素,就會出現問題。我無法找到合適的PorterDuff/Paint
模式,因此即使使用透明像素,編輯後的切片也會替換原始圖像上的部分。 我要的是得到的結果爲(4)
我最好的選擇到目前爲止是使用PorterDuff.SRC
描繪的,但是當你在下面的圖片中看到的,透明的像素在原始圖像中變成黑色。如果我將油漆顏色設置爲透明,則整個結果爲黑色。
mBlitPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
mImageCanvas.drawBitmap(mArenaBitmap, invertedMatrix, mBlitPaint);
我也試過SRC_OVER
甚至mImageCanvas.drawARGB (0xff,0,0,0),
,但沒有運氣。在第一種情況下,透明像素被忽略。第二,透明像素被塗成黑色。
不幸的是不同的圖層不是一個選項,這是一個非常複雜的版本程序與過濾器,opengl等的一部分。我需要解決問題沒有改變太多的東西 – rupps 2014-11-22 09:03:25