Использование растрового изображения в качестве альфа для Layout - PullRequest
0 голосов
/ 25 августа 2018

Я хотел бы использовать растровое изображение в качестве aplha в макете.Если для примера я использую макет с цветом фона и сверху сверху вид изображения или другой макет, я бы хотел отобразить форму с использованием маски aplha.Картинка стоит тысячи слов:

https://zupimages.net/up/18/34/3zii.jpg

Я смотрю на Canvas.drawBitmap, но не могу понять, как с этим справиться

Как вы думаете, это возможно?Спасибо

PS: Это всего лишь пример, альфа-битовая карта на самом деле намного сложнее (я не могу просто поместить TextView)

1 Ответ

0 голосов
/ 26 августа 2018

Вот функция, которая может работать для вас:

public static Bitmap makeTransparent(Bitmap bit, Bitmap mask) {
    int width =  bit.getWidth();
    int height = bit.getHeight();
    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    int [] allpixels = new int [ bmp.getHeight()*bmp.getWidth()];
    bit.getPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(),bmp.getHeight());
    bmp.setPixels(allpixels, 0, width, 0, 0, width, height);

    Bitmap bmpM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    int [] allpixelsM = new int [ bmpM.getHeight()*bmpM.getWidth()];
    mask.getPixels(allpixelsM, 0, bmpM.getWidth(), 0, 0, bmpM.getWidth(),bmpM.getHeight());
    bmpM.setPixels(allpixelsM, 0, width, 0, 0, width, height);

    for(int i =0; i<bmp.getHeight()*bmp.getWidth();i++) {
        int A = (allpixelsM[i] >> 16) & 0xff;
        int R = (allpixels[i] >> 16) & 0xff;
        int G = (allpixels[i] >> 8) & 0xff;
        int B = (allpixels[i]) & 0xff;
        allpixels[i] = Color.argb(A, R, G, B);
    }

    bmp.setPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight());
    return bmp;
}
...