2011-12-22 5 views
0

J'ai besoin de créer une vue personnalisée amd dans onDraw méthode J'ai besoin de dessiner quelques bitmaps, en utilisant un masque. J'ai créé une peinture:android masque bitmap

Paint maskPaint = new Paint(); 
    maskPaint.setAntiAlias(true); 
    maskPaint.setXfermode(new AvoidXfermode(Color.RED, 0, AvoidXfermode.Mode.TARGET)); 

et je dessine mon bitmap sur toile en utilisant cette peinture. Mon problème est que dans les coins, mon masque a quelques pixels avec alpha inférieur à 255. Y at-il un moyen de dessiner les pixels de mon bitmap sur le masque avec le même alpha que l'image du masque sur ces pixels avec aplha supérieur à zéro?

+0

Vous pouvez essayer d'augmenter la tolérance? – Jave

+0

pas d'utilisation, la couleur est la même sur le masque, l'alpha est différent dans les coins ... mais la couleur reste la même –

+0

Hm, c'est un peu inattendu. Habituellement, on supposerait qu'un changement d'alpha serait égal à un changement dans d'autres canaux. – Jave

Répondre

0
Resources resources = this.getResources(); 
Bitmap mask = BitmapFactory.decodeResource(resources,R.drawable.fx_lightleak2_small); 
int width=bMap.getWidth(); 
int height=bMap.getHeight(); 
Bitmap resizedbitmap=Bitmap.createScaledBitmap(mask, width, height, true); 

Bitmap result = Bitmap.createBitmap(bMap.getWidth(), bMap.getHeight(), Config.ARGB_8888); 
Canvas c = new Canvas(result); 
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
paint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN)); 
c.drawBitmap(bMap, 0, 0, null); 
paint.setAlpha(200); 
c.drawBitmap(resizedbitmap, 0, 0, paint); 
paint.setXfermode(null); 
effect_5.setImageBitmap(result); 
2
private Bitmap maskingImage(Bitmap s, int drawable) { 
     Bitmap original = s; 
     Bitmap mask = BitmapFactory.decodeResource(getResources(),drawable); 
     Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(),Bitmap.Config.ARGB_8888); 
     Canvas mCanvas = new Canvas(result); 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
     mCanvas.drawBitmap(original, 0, 0, null); 
     mCanvas.drawBitmap(mask, 0, 0, paint); 
     paint.setXfermode(null); 
     return result; 
    }