2012-12-23 4 views
1

다른 비트 맵 마스크를 사용하고 있습니다.안드로이드 마스크 두 비트 맵 지우기 경계

enter image description here

어떻게이 테두리를 제거합니까 : 당신이 이미지에서 볼 수있는 동작은, 불행하게도 마스킹의 결과가 약간의 검은 색 테두리 볼 잘 성공? 소스 이미지에 없습니다.

내가 사용하고 코드를 게시합니다 : getMask()는 퍼즐의 그림을 나타내는 비트 맵을 반환

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;   
} 

. 내 영어 :-)에 대한 모든

죄송합니다 감사합니다, 당신의 도움을받을 수 있도록 노력하겠습니다

UPDATE :

enter image description here

:

검은 색 테두리 나는이 그림에서 지적하는 것입니다

업데이트 :

변환 순서를 지정하십시오. 세 번째 이미지는 첫 번째 이미지와 동일하지만 컬러가 없습니다. 문제는 퍼즐의 검은 색 가장자리입니다. 은 좀 더 명확하게 희망 :

enter image description here

+0

검은 경계가 무엇입니까? 이미지를 생성하는 입력은 무엇입니까? –

+0

사용하는 모든 이미지와 예상 결과를 게시하는 것이 가장 좋을 것입니다. –

+0

아무도 도와 줄 수없는 새로운 정보와 그림을 추가했습니다. –

답변

0

방법은 내가 마스크 이미지 것은 주위에 당신이 무엇에서 다른 방법의 일종이다립니다. 그 마스크 위에 다음 이미지가 PorterDuff.Mode SRC_IN (되지 DST_IN)으로 설정되어 있고, 마스크가 처음 인출되어 있고

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;   
} 

참고. 이 방법을 사용하면 이전 소스를 기본 마스크로 그릴 수 있고 새로운 (퍼즐) 마스크를 추가 한 다음 SRC_IN 페인트로 최종 소스/이미지를 그릴 때마다 새로운 퍼즐 조각을 추가 할 수 있습니다. 검은 경계선이 해결되지 않으면 마스크에 이러한 문제의 원인이 될 수있는 가장자리가 흐려져 있지 않은지 확인하십시오.

또한 ANTI_ALIAS_FLAG는 텍스처에서 아무 것도하지 않습니다. 부드럽게 크기가 조절 된 텍스처를 사용하려면 paint.setFilterBitmap (true);