皮皮网

【dirsearch源码解析】【rgb转cmyk源码】【人脸识别c 源码】android二维码源码_android 生成二维码源码

来源:vfp 如何菜单代码源码 时间:2024-12-24 10:35:49

1.在android开发中 什么库可以识别DM二维码

android二维码源码_android 生成二维码源码

在android开发中 什么库可以识别DM二维码

       1.1 准备工作

       å¦‚果我们只做二维码的生成,那么只需要添加核心jar包即可,

       1.2 二维码生成

       OK,添加完jar包之后我们就可以开始写二维码生成代码了,二维码本身就是一张Bitmap图片,所以我们这里主要就是看怎么样来生成这张图片,我在主界面添加一个按钮和一个ImageView,当点击按钮时生成一张二维码图片显示在ImageView上。布局如下:

       [java] view plain copy print?维维码dirsearch源码解析

       <?xml version="1.0" encoding="utf-8"?>

       <RelativeLayout

        xmlns:android="/apk/res/android"

        xmlns:tools="/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        tools:context="org.mobiletrain.qrwriter.MainActivity">

        <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="generate"

        android:text="生成二维码"/>

        <ImageView

        android:id="@+id/iv"

        android:layout_width="dp"

        android:layout_height="dp"

        android:layout_centerInParent="true"/>

       </RelativeLayout>

       å½“我点击按钮时生成二维码图片,那我们就来看看生成二维码图片的核心代码:

       [java] view plain copy print?

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

        QRCodeWriter qrCodeWriter = new QRCodeWriter();

        Map<EncodeHintType, String> hints = new HashMap<>();

        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] = 0x;

        } else {

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

        }

        }

        }

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

        } catch (WriterException e) {

        e.printStackTrace();

        }

        return null;

       }

       é¦–先这个方法接收三个参数,这三个参数分别表示生成二维码的文本内容(你要把哪一个文本用二维码图片表示出来),第二个和第三个参数分别表示生成的二维码图片的宽和高。在这里,我们首先要获得一个QRCodeWriter实例,该实例中有一个方法叫做encode,通过该方法对文本内容进行编码,该方法共有五个参数,第一个参数表示生成二维码的文本内容,第二个参数表示编码格式,第三个参数表示生成的二维码的宽度,第四个参数表示生成的二维码的高度,第五个参数可选,可以用来设置文本的编码,encode方法的返回值是一个BitMatrix,你可以把BitMatrix理解成一个二维数组,这个二维数组的每一个元素都表示一个像素点是否有数据。OK,接下来我们需要定义一个int数组用来存放Bitmap中所有像素点的颜色,可是我们又怎么知道每一个像素点是什么颜色呢?这个时候就需要我们遍历BitMatrix了,如果BitMatrix上的点表示 该点有数据,那么对应在Bitmap上的像素点就是黑色,否则就是白色。BitMatrix中的get方法的返回值为一个boolean类型,true表示该点有数据,false表示该点没有数据。通过两个嵌套的for循环将BitMatrix遍历一遍,然后给pixels数组都赋上值,OK,pixels数组有值之后,接下来调用Bitmap的createBitmap方法创建一个Bitmap出来就可以了,createBitmap方法共接收6个参数,第一个参数表示Bitmap中所有像素点的颜色,第二个参数表示像素点的偏移量,第三个参数表示Bitmap每行有多少个像素点,第四个参数表示生成的Bitmap的宽度,第五个参数表示生成的Bitmap的高度,第六个参数表示生成的Bitmap的色彩模式,因为二维码只有黑白两种颜色,所以我们可以不用考虑透明度,直接使用RGB_即可。OK,这样的话我们就获取到了二维码的图片了,最后我们再来看看点击事件:

       [java] view plain copy print?

       public void generate(View view) {

        Bitmap qrBitmap = generateBitmap("",, );

        iv.setImageBitmap(qrBitmap);

       }