2012-12-23 54 views
1

我正在使用mask與另一個位圖。操作非常成功,遺憾的是屏蔽的結果出現了輕微的黑色邊框,你可以在圖片中看到:Android Mask 2位圖清除邊框

enter image description here

我如何刪除這條邊界?在源圖像中不存在。

我會後我正在使用的代碼:

public Bitmap mask(Bitmap source) { 
    Bitmap targetBitmap = Bitmap.createBitmap(getWidth(),getHeight(), 
      Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(targetBitmap); 
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
    paint.setAntiAlias(true); 
    paint.setDither(true); 
    canvas.drawBitmap(source, 0, 0, null); 
    canvas.drawBitmap(getMask(), 0, 0, paint); 
    paint.setXfermode(null); 
    return targetBitmap;   
} 

其中getMask()返回表示益智圖中的位圖。 我希望得到您的幫助,謝謝大家

對不起,我的英語:-)

UPDATE:

黑色邊框是我在這張照片指出:

enter image description here

更新:

放置轉換的順序。第三張圖像與第一張相同,但沒有顏色。問題在於拼圖的黑色邊緣。 我希望能更清楚:

enter image description here

+0

你提到的黑色邊框是什麼?什麼是生成該圖像的輸入? –

+0

如果您發佈了您使用的所有圖像以及您的預期結果,這將是最好的。 –

+0

我添加了新的信息和圖片,沒有人能幫助我? –

回答

0

的方式我繪製掩模圖像是一種其他的方式,從你做什麼周圍。

public Bitmap mask(Bitmap source) { 
    Bitmap targetBitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(targetBitmap); 
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    // paint.setAntiAlias(true); // you've already set this in the constructor 
    paint.setDither(true); 
    canvas.drawBitmap(getMask(), 0, 0, null); 
    canvas.drawBitmap(source, 0, 0, paint); 
    // paint.setXfermode(null); // no need for this 
    return targetBitmap;   
} 

注意PorterDuff.Mode設置爲SRC_IN(未DST_IN),並且所述掩模被吸入第一,然後在圖像上該掩模的頂部上。使用這種方法,您還可以將以前的源代碼作爲基礎蒙版,添加新的(拼圖)蒙版,然後使用SRC_IN繪製最後的源代碼/圖像,每次添加新的拼圖。 如果這樣不能解決黑色邊框,請檢查您的面罩沒有可能導致這些問題的羽毛(透明)邊緣。

另外,ANTI_ALIAS_FLAG在紋理上不做任何事情。如果你想平滑地縮放紋理,使用paint.setFilterBitmap(true);