0

2つのマスクを適用しているビットマップがあります。ビットマップの右側にマスクを適用すると正常に機能しますが、その後、同じビットマップの下部にマスクを適用すると、再マスクのためにビットマップ上に再び表示される領域があります。私は下の写真を使ってこの問題を説明しようとしました。丸で囲んだ部分が問題を引き起こしています。再マスキングした後でも、その領域を透明に保ちたいです。

ここに画像の説明を入力してください

これが私のマスキング関数のコードを切り取ったものです。

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

1 に答える 1

0

解決策の 1 つは、白黒の代わりに黒透明マスクを使用することです。黒い透明なマスクを使用すると、最初にマスクを描画してから、それらのマスクでトリミングしたいものを描画する必要があります

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

Mode.DST_IN の代わりに。

于 2013-04-15T13:27:59.477 に答える