欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

bitmap+文本生成新的bitmap的实现

程序员文章站 2022-07-04 22:30:41
注:参数content为生成二维码bitmap的内容,该二维码bitmap在和文本title组合生成一个新的bitmap ......

  

注:参数content为生成二维码bitmap的内容,该二维码bitmap在和文本title组合生成一个新的bitmap

 

package info.ecloud.merchant.util;

import android.graphics.bitmap;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.graphics.rect;

import com.google.zxing.barcodeformat;
import com.google.zxing.encodehinttype;
import com.google.zxing.qrcode.decoder.errorcorrectionlevel;
import com.journeyapps.barcodescanner.barcodeencoder;

import java.util.hashtable;



public class saveimageutils {

    private static final string charset = "utf-8";
    /**
     * 生成图片  加上title的图片
     * @param content
     * @param title
     * @return
     */
    public static bitmap createimage(string content,string title) {
        int picwidth = 520;//生成图片的宽度
        int picheight = 565;//生成图片的高度
        int titletextsize = 25;
        int textcolor = color.black;
        int qrwidth = 370;
        int qrheight = 370;
        int paddingtop = 5;
        int paddingmiddle = 20;
        int paddingbottom = 20;

        //最终生成的图片
        bitmap result = bitmap.createbitmap(picwidth,picheight,bitmap.config.argb_8888);

        paint paint = new paint();
        paint.setcolor(color.white);
        canvas canvas = new canvas(result);

        //先画一整块白色矩形块
        canvas.drawrect(0,0,picwidth,picheight,paint);

        //画title文字
        rect bounds = new rect();
        paint.setcolor(textcolor);
        paint.settextsize(titletextsize);
        //获取文字的字宽高,以便将文字与图片中心对齐
        paint.gettextbounds(title,0,title.length(),bounds);
        //画白色矩形块
        int qrtop = paddingtop+titletextsize+paddingmiddle;//二维码的顶部高度

        //画二维码
        hashtable<encodehinttype, object> hints = new hashtable<>();
        hints.put(encodehinttype.error_correction, errorcorrectionlevel.h);
        hints.put(encodehinttype.character_set, charset);
        hints.put(encodehinttype.margin, 5);
        bitmap image = null;
        try {
            barcodeencoder barcodeencoder = new barcodeencoder();
            image = barcodeencoder.encodebitmap((string) content, barcodeformat.qr_code, 400, 400);
        } catch (exception e) {
            e.printstacktrace();
        }

        paint.setcolor(color.black);
        canvas.drawbitmap(image,(picwidth-qrwidth)/2,qrtop,paint);

        //画文字
        paint.setcolor(color.black);
        paint.settextsize(titletextsize);
        int line = 3;
        int texttop = qrtop+qrheight+paddingbottom;//地址的顶部高度

        for (int i = 0 ; i < line ; i++){
            string[] split = title.split("-");
            paint.gettextbounds(title,0,split[i].length(),bounds);
            canvas.drawtext(split[i],picwidth/2-bounds.width()/2,texttop+i*titletextsize+i*5+bounds.height()/2,paint);
        }

        canvas.save();
        canvas.restore();

        return result;
    }


}