2012-11-23 2 views
0

J'ai bitmap sur lequel j'applique deux masques. Lorsque j'applique un masque sur le côté droit de l'image bitmap, cela fonctionne bien, mais après cela quand j'applique un masque sur le côté inférieur de la même bitmap, j'ai une zone sur bitmap qui réapparaît à cause du remasking. J'ai essayé d'expliquer ce problème en utilisant la photo ci-dessous. La zone encerclée pose un problème. Je veux que cette zone reste transparente même après le remaillage.Android Bitmap masquage

enter image description here

Voici mon code de fonctions de masquage ciselée.

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

Répondre

0

Une solution pourrait être d'utiliser des masques transparents noir au lieu de noir et blanc. Bien que vous cinque le masque noir transparent d'abord pour dessiner les masques et dessiner tout ce que vous voulez rogner par ces masques avec

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

au lieu de Mode.DST_IN.