android掩码位图

android掩码位图,android,image,paint,mask,Android,Image,Paint,Mask,我需要在onDraw方法中创建一个自定义视图,我需要使用掩码绘制一些位图。我画了一幅画: Paint maskPaint = new Paint(); maskPaint.setAntiAlias(true); maskPaint.setXfermode(new AvoidXfermode(Color.RED, 0, AvoidXfermode.Mode.TARGET)); 我用这种颜料在画布上画位图。我的问题是,在拐角处,我的遮罩有一些alpha小于255的像素。有没

我需要在
onDraw
方法中创建一个自定义视图,我需要使用掩码绘制一些位图。我画了一幅画:

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

我用这种颜料在画布上画位图。我的问题是,在拐角处,我的遮罩有一些alpha小于255的像素。有没有办法在遮罩上绘制位图的像素,其alpha与遮罩图像在aplha大于零的像素上的alpha相同?

您可以尝试增加容差?没有用,遮罩上的颜色相同,角上的alpha不同。。。但颜色保持不变,这有点出乎意料。通常,人们会假设alpha的变化等于其他通道的变化。您可以尝试增加容差?没有用,遮罩上的颜色相同,角落处的alpha不同。。。但颜色保持不变,这有点出乎意料。通常,人们会假设alpha的变化等于其他通道的变化。
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);
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;
    }