2014-11-22 96 views
5

我的應用程序允許用戶編輯圖像。圖像在「切片」中編輯:用戶選擇要編輯的大圖像的一部分(1),用戶編輯它(2,3),然後當用戶完成時,編輯的切片被複制回原始圖像(4)。您可以在下圖中看到簡化的過程。drawBitmap使用透明位圖繪製,替換原始像素

Sample workflow

  • 要編輯切片,創建所剪切區域的位圖,這是一個用戶編輯(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),,但沒有運氣。在第一種情況下,透明像素被忽略。第二,透明像素被塗成黑色。

Sample result

回答

0

我有過這樣的問題,以及,無法找到解決的辦法,幸運的是我的目的只是爲了顯示一些不實際編輯並保存它...我用不同層次,這似乎工作。但如果你找到一個解決方案,我想知道你是怎麼做的

+0

不幸的是不同的圖層不是一個選項,這是一個非常複雜的版本程序與過濾器,opengl等的一部分。我需要解決問題沒有改變太多的東西 – rupps 2014-11-22 09:03:25

相關問題