растровая маска для Android - PullRequest
0 голосов
/ 22 декабря 2011

Мне нужно создать пользовательское представление amd в методе onDraw Мне нужно нарисовать несколько растровых изображений, используя маску. Я создал краску:

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

и я рисую свое растровое изображение на холсте, используя эту краску. Моя проблема в том, что в углах у моей маски есть несколько пикселей с альфа-каналом меньше 255. Можно ли нарисовать пиксели моего растрового изображения на маске с той же самой альфа, что и изображение маски на тех пикселях с aplha больше нуля?

Ответы [ 2 ]

3 голосов
/ 02 июля 2013
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;
    }
0 голосов
/ 05 мая 2012
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);
...