2012-11-23 3 views
0

두 개의 마스크를 적용 할 비트 맵이 있습니다. 비트 맵의 ​​오른쪽에 마스크를 적용하면 문제가 없지만 같은 비트 맵의 ​​아래쪽에 마스크를 적용하면 다시 매핑하기 때문에 비트 맵 영역이 다시 나타납니다. 아래 그림을 사용하여이 문제를 설명하려고했습니다. 회피 한 영역이 문제의 원인입니다. 나는 그 지역이 다시 태어난 후에도 투명하게 남아 있기를 바란다. 여기 안드로이드 비트 맵 마스킹

enter image description here

내 마스킹 기능 코드를 냈다입니다.

paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
....... 

public void setRightMask(MyBitmap bmp, Type type) { 
    int maskIndex = -1; 
    switch(type){ 
     case CONCAVE: 
      maskIndex = 0; 
      break; 
     case CONVEX: 
      maskIndex = 6; 
      break; 

    } 

    Bitmap result = Bitmap.createBitmap((int)bmp.getWidth(), (int)bmp.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(result); 
    canvas.drawBitmap(bmp.getBmp(), 0, 0, null); 
    canvas.drawBitmap(masks[maskIndex].getBmp(), bmp.getWidth() - masks[maskIndex].getBmp().getWidth(), 0, paint); 
    bmp.setBmp(result); 
} 


public void setBottomMask(MyBitmap bmp, Type type) { 
    int maskIndex = -1; 
    switch(type){ 
     case CONCAVE: 
      maskIndex = 1; 
      break; 
     case CONVEX: 
      maskIndex = 7; 
      break; 

    } 

    Bitmap result = Bitmap.createBitmap((int)bmp.getWidth(), (int)bmp.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(result); 
    canvas.drawBitmap(bmp.getBmp(), 0, 0, null); 
    canvas.drawBitmap(masks[maskIndex].getBmp(), 0, bmp.getHeight() - masks[maskIndex].getBmp().getHeight(), paint); 
    bmp.setBmp(result); 
} 

답변

0

하나의 해결책은 흑백이 아닌 블랙 투명 마스크를 사용하는 것일 수 있습니다. 블랙 투명 마스크 아 파크 먼저 대신 Mode.DST_IN의

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

와 그 마스크에 의해 잘릴 수 원하는 무엇이든 그릴 후 마스크를 그려해야하지만.

관련 문제