如何在画布上绘制位图,并尊重位图的 Alpha 值?

问题描述 投票:0回答:4

背景

我有一个主位图,我需要在其上绘制其他位图。

主位图有一些半透明像素(具有 Alpha 通道不同值的像素),因此在其上绘制的其他位图应与其合并,而不是完全覆盖颜色。

问题

如何设置画布以在主位图上相对于半透明像素绘制位图?

注意:alpha 不适用于整个位图。它是每个像素。

android bitmap android-canvas alpha-transparency
4个回答
8
投票

Canvas.setXfermode(Xfermode xfermode)
。您可以选择多个
Xfermode


4
投票
public void putOver(Bitmap master, Bitmap alphaBitmap){
    Canvas canvas = new Canvas(matter);
    Paint paint = new Paint();
    paint.setXferMode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
    canvas.drawBitmap(left, top, left+alphaBitmap.width, left+alphaBitmap.height, paint);
}

0
投票
    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,这样就变成半透明了。


0
投票

使用任何

Bitmap
作为 alpha 遮罩:

*1。在

Canvas
上绘制遮罩位图。

*2。使用

PorterDuff.Mode.SRC_IN
代替
Paint

*3。绘制源位图。

static Bitmap getBitmap( Bitmap bm_source, Bitmap bm_mask ){
    Bitmap bm = Bitmap.createBitmap( bm_source.getWidth(), bm_source.getHeight(), Bitmap.Config.ARGB_8888 );
    Canvas canvas = new Canvas( bm );
    canvas.drawBitmap( bm_mask, 0, 0, null );
    Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG );
    paint.setXfermode( new PorterDuffXfermode( PorterDuff.Mode.SRC_IN ));
    canvas.drawBitmap( bm_source, 0, 0, paint );
    return bm;
}

© www.soinside.com 2019 - 2024. All rights reserved.