Как нарисовать растровое изображение на холсте, соблюдая альфа-значения растрового изображения?

задний план

у меня есть основное растровое изображение, которое мне нужно нарисовать на нем другие растровые изображения.

основное растровое изображение имеет несколько полупрозрачных пикселей (пикселей с вариантными значениями для альфа-канала), поэтому другие растровые изображения, нарисованные на нем, должны быть объединены с ним, а не полностью переопределять цвета.

вопрос

как я могу настроить холст для рисования растровых изображений на главном растровом изображении относительно полупрозрачных пикселей?

примечание: альфа не для всего растрового изображения. это на пиксель.


person android developer    schedule 09.07.2013    source источник
comment
у вас есть два разных растровых изображения?   -  person Blackbelt    schedule 09.07.2013
comment
да и даже больше. теперь, когда я думаю об этом, может быть, установка чего-то с помощью объекта рисования сработает.   -  person android developer    schedule 09.07.2013
comment
См. мой ответ по адресу: stackoverflow.com/a/44754944/2603965   -  person grebulon    schedule 26.06.2017


Ответы (3)


Canvas.setXfermode(Xfermode xfermode). Есть несколько Xfermode, которые вы можете выбрать.

person techiServices    schedule 09.07.2013
comment
правильным кажется DST_ATOP : paint.setXfermode(new PorterDuffXfermode(Mode.DST_ATOP)); - person android developer; 10.07.2013
comment
@Android-разработчик. я бы сказал, что вам нужно проверить, что подходит именно вам;) - person techiServices; 10.07.2013
comment
да, что я хотел, так это то, что если есть альфа-канал, он будет объединен с другим растровым изображением в зависимости от значения альфа-канала, точно так же, как когда вы используете приложение для рисования и обрезаете область до области с полупрозрачностью. - person android developer; 11.07.2013
comment
+100 за решение, ищу 3 часа в интернете, но это единственное решение, которое работает :) - person dakshbhatt21; 28.11.2013

    public Bitmap PutoverChange(Bitmap all, Bitmap scaledBorder) {
    Paint paint = new Paint();
    final int width = change.getWidth();
    final int height = change.getHeight();
    patt = Bitmap.createScaledBitmap(change, width, height, true);
    Bitmap mutableBitmap = patt.copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(mutableBitmap);
    scaledBorder = Bitmap.createScaledBitmap(border, width, height, true);
    paint.setAlpha(100);
    canvas.drawBitmap(scaledBorder, 0, 0, paint);
    return mutableBitmap;

}

здесь прозрачность равна 100. вы можете изменить его на 50, чтобы он стал полупрозрачным.

person Kosh    schedule 09.07.2013
comment
я уже писал, что не хочу ставить прозрачность всего битмапа. есть некоторые пиксели с прозрачностью, а не все, а некоторые имеют другое значение прозрачности. - person android developer; 09.07.2013

person    schedule
comment
Добро пожаловать в Stack Overflow! Как правило, ответы гораздо полезнее, если они включают объяснение того, для чего предназначен код, и почему это решает проблему, не вводя других. - person Nathan Tuggy; 04.04.2015