for a given bitmap and mask:


first create a temporary bitmap:
bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.bitmap); mask = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.mask); float[] src = { 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 1, 1, 1, -1, 0, }; ColorMatrix cm = new ColorMatrix(src); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm); maskPaint = new Paint(); maskPaint.setColorFilter(filter); maskPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); filteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas c = new Canvas(filteredBitmap); c.drawBitmap(bitmap, 0, 0, null); c.drawBitmap(mask, 0, 0, maskPaint); colorFilterPaint = new Paint(); colorFilterPaint.setColorFilter(new LightingColorFilter(0xffffff, 0x880000));
and draw it (I expanded it, as my emulator reduced it):
@Override public void draw(Canvas canvas) { canvas.save(); canvas.scale(3, 3); canvas.drawBitmap(bitmap, 0, 0, null); canvas.drawBitmap(filteredBitmap, 0, 0, colorFilterPaint); canvas.restore(); }
and the result:
