Android将一张图放在另一张图的指定位置

package com.maiya.suixingou.common.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.text.TextUtils;

import com.maiya.core.common.utils.Utils;
import com.maiya.suixingou.R;
/**
 * Created by chenxiangxiang on 2019/1/24.
 */

public class BitmapUtils {

    public static int IMG_DEFAULT_WIDTH = 750;      //背景图的宽度
    public static int IMG_DEFAULT_HEIGHT = 1334;    //背景图的高度

    public static int QRCODE_X = 236;               //二维码位置X
    public static int QRCODE_Y = 886;               //二维码位置Y

    public static int TEXT_CENTER_X = 375;          //文字居中位置
    public static int TEXT_Y = 1262;                //文字y

    /**
     *
     * @param context
     * @param backBitmap 背景图
     * @param frontBitmap 上层图
     * @param inviteCode  需要绘制上去的文字
     * @param defBackImg  默认背景图
     * @return
     */
    public static Bitmap mergeBitmap(Context context, Bitmap backBitmap, Bitmap frontBitmap, String inviteCode,int defBackImg) {
        if (backBitmap == null || backBitmap.isRecycled() || frontBitmap == null || frontBitmap.isRecycled()) {
            backBitmap = BitmapFactory.decodeResource(context.getResources(), defBackImg);
        }
        backBitmap =scaleBitmap(backBitmap,IMG_DEFAULT_WIDTH,IMG_DEFAULT_HEIGHT);
        //合并bitmap
        Bitmap bitmap = Bitmap.createBitmap(IMG_DEFAULT_WIDTH, IMG_DEFAULT_HEIGHT, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(backBitmap, 0, 0, null);
        if(!Utils.isEmpty(frontBitmap)){
            canvas.drawBitmap(frontBitmap, QRCODE_X, QRCODE_Y, null);
        }
        if(!TextUtils.isEmpty(inviteCode)){
            Paint paint = new Paint();
            paint.setTextSize(sp2px(context, 20));
            paint.setColor(Color.WHITE);
            paint.setTextAlign(Paint.Align.CENTER);
            canvas.drawText(inviteCode, TEXT_CENTER_X, TEXT_Y, paint);
        }

        return bitmap;
    }

    private static Bitmap scaleBitmap(Bitmap bitmap,int defWith,int defHeght){
        //缩放
        float scaleX = 1.0f;
        float scaleY = 1.0f;
        if (bitmap.getWidth() != defWith) {
            scaleX = (defWith * 1.0f / bitmap.getWidth());
        }
        if (bitmap.getHeight() != defHeght) {
            scaleY = (defHeght * 1.0f / bitmap.getHeight());
        }
        Matrix matrix = new Matrix();
        matrix.postScale(scaleX, scaleY);
       return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
    }

    private static float sp2px(Context context, float sp) {
        final float scale = context.getResources().getDisplayMetrics().scaledDensity;
        return sp * scale;
    }
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值