我有一个主位图,我需要在其上绘制其他位图。
主位图有一些半透明像素(具有 Alpha 通道不同值的像素),因此在其上绘制的其他位图应与其合并,而不是完全覆盖颜色。
如何设置画布以在主位图上相对于半透明像素绘制位图?
注意:alpha 不适用于整个位图。它是每个像素。
Canvas.setXfermode(Xfermode xfermode)
。您可以选择多个 Xfermode
。
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);
}
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,这样就变成半透明了。
使用任何
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;
}