Android Bitmap屏蔽

时间:2012-11-23 11:12:29

标签: android canvas bitmap masking

我有位图,我正在应用两个蒙版。当我在位图的右侧应用蒙版时,它工作正常但在此之后我在相同位图的底部应用蒙版时,我在位图上的区域由于重新屏蔽而再次出现。我试图用下面的图片来解释这个问题。圈出的区域造成了问题。我希望即使重新曝光后该区域仍保持透明。

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

1 个答案:

答案 0 :(得分:0)

一种解决方案可能是使用黑色透明蒙版而不是黑白色。虽然黑色透明的面具你首先必须绘制面具然后绘制任何你想要被那些面具裁剪的

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

而不是Mode.DST_IN。