android 生成二 维码

这篇博客介绍了如何在Android应用中使用第三方库ZXing生成二维码,并且详细讲解了如何在二维码中间添加App的Logo。通过`generateBitmap`方法生成二维码图片,然后在`addLogo`方法中将Logo与二维码合并,最终展示在ImageView上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二维码生成使用的是一个第三方库:com.google.zxing 这个是什么自行百度吧。

制作一个带app logo的二维码

ImageView brImageView=new ImageView();

String brUrl="要生成二维码的链接(或者其他什么的事情看而定)";

//生成一个二维码bitmap width height

Bitmap qrBitmap = generateBitmap(brUrl,400, 400);

//在二维码中间生成一个logo所需要的bitmap

Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(),“logo资源文件”);

//把二维码和logo绘制到一个bitmap上,然后显示在ImageView

Bitmap bitmap = addLogo(qrBitmap, logoBitmap);

bar_code.setImageBitmap(bitmap);

生成二维码bitmap

private Bitmap generateBitmap(String content,int width, int height) {

        QRCodeWriter qrCodeWriter = new QRCodeWriter();

        Hashtable<EncodeHintType, String> hints = new Hashtable<>();

        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

        try {

            BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height,hints);

            int[] pixels = new int[width * height];

            for (int i = 0; i < height; i++) {

                for (int j = 0; j < width; j++) {

                    if (encode.get(j, i)) {

                        pixels[i * width + j] = 0x00000000;

                    } else {

                        pixels[i * width + j] = 0xffffffff;

                    }

                }

            }

            return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);

        } catch (WriterException e) {

            e.printStackTrace();

        }

        return null;

 }

//把二维码和logo合并成一个bitmap

private Bitmap addLogo(Bitmap qrBitmap, Bitmap logoBitmap) {

        int qrBitmapWidth = qrBitmap.getWidth();

        int qrBitmapHeight = qrBitmap.getHeight();

        int logoBitmapWidth = logoBitmap.getWidth();

        int logoBitmapHeight = logoBitmap.getHeight();

        Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth, qrBitmapHeight, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(blankBitmap);

        canvas.drawBitmap(qrBitmap, 0, 0, null);

        canvas.save(Canvas.ALL_SAVE_FLAG);

        float scaleSize = 1.0f;

        while ((logoBitmapWidth / scaleSize) > (qrBitmapWidth / 5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight / 5)) {

            scaleSize *= 2;

        }

        float sx = 1.0f / scaleSize;

        canvas.scale(sx, sx, qrBitmapWidth / 2, qrBitmapHeight / 2);

        canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) / 2, (qrBitmapHeight - logoBitmapHeight) / 2, null);

        canvas.restore();

        return blankBitmap;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值