安卓把两个位图覆盖合成为一个位图。

最近项目中需要用到扫描二维码功能,但是二维码是动态的 背景图也是动态的 所以需要两张图片组合起来提供给用户扫描,所以需要把两张位图组合成一张位图。

public static Bitmap mergeBitmap(Bitmap backBitmap, Bitmap frontBitmap) {
    if (backBitmap == null || backBitmap.isRecycled()
            || frontBitmap == null || frontBitmap.isRecycled()) {
        return null;
    }
    //创建新的位图,宽高为背景位图的宽高。
    Bitmap newBitmap = Bitmap.createBitmap(backBitmap.getWidth(), backBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    //创建画布
    Canvas canvas = new Canvas(newBitmap);
    //绘制背景图,从左上角为坐标为0 0的位置绘制。
    canvas.drawBitmap(backBitmap, 0, 0, null);
    //绘制需要覆盖至上方的位图,绘制的位置为背景图的右下角减去上方位图的宽高(也就是在新位图的右下角位置)
    canvas.drawBitmap(frontBitmap, backBitmap.getWidth() - frontBitmap.getWidth(),backBitmap.getHeight() - frontBitmap.getHeight(), null);
    //创建画笔
    Paint paint = new Paint();
    //设置需要绘制的文字的大小
    paint.setTextSize(3);
    //设置需要绘制的文字的颜色
    paint.setColor(Color.parseColor("#24A4FF"));
    //创建一个矩形
    Rect bounds = new Rect();
    //需要绘制的文字
    String text = "长按识别二维码";
    //把文字放至矩形中
    paint.getTextBounds(text, 0, text.length(), bounds);
    //绘制文字
    canvas.drawText(text, backBitmap.getWidth() - (frontBitmap.getWidth() + bounds.width()) / 2 - 2,
            backBitmap.getHeight() - 12, paint);
    canvas.save();
    canvas.restore();
    return newBitmap;
}

猜你喜欢

转载自blog.csdn.net/qq77485042/article/details/102501103