#4 zxing源码分析

Open
opened 4 years ago by lqg · 3 comments

介绍

可以识别二维码,条形码。

提供 java/android/js/c# 等多种调用。

开源地址: https://github.com/zxing/zxing.git 这个项目很大,其实大部分都是test图片。

android开发

只需要 core 目录子项目即可,然后新建 android 项目 zxinglibrary 加载这个 core.jar 。

在新项目中使用扫码/解码功能。只需要加载这个 zxinglibrary 模块即可。

扫码过程

第一步: 打开摄像头,CameraManager cameraManager.startPreview(); 不断拍照获取bitmap:

第二步:开启新线程识别图片中二维码

//带图片参数调用 core.jar方法解码
rawResult = multiFormatReader.decodeWithState(bitmap);

// core.js中调用指定reader解码。那么 reader 作为一个接口,如果是二维码调用二维码方法解码
reader.decode(image, this.hints);

// QRCodeReader 实现了Reader
public class QRCodeReader implements Reader


// 图片转化为矩阵,矩阵计算
BitMatrix bits = extractPureBits(image.getBlackMatrix());

// 定位二维码

//数据块识别 resultBytes

        for(int var11 = 0; var11 < var18; ++var11) {
            DataBlock dataBlock;
            byte[] codewordBytes = (dataBlock = var17[var11]).getCodewords();
            int numDataCodewords = dataBlock.getNumDataCodewords();
            this.correctErrors(codewordBytes, numDataCodewords);

            for(int i = 0; i < numDataCodewords; ++i) {
                resultBytes[resultOffset++] = codewordBytes[i];
            }
        }


## 介绍 可以识别二维码,条形码。 提供 java/android/js/c# 等多种调用。 开源地址: https://github.com/zxing/zxing.git 这个项目很大,其实大部分都是test图片。 ### android开发 只需要 core 目录子项目即可,然后新建 android 项目 **zxinglibrary** 加载这个 core.jar 。 ![](https://git.yoqi.me/attachments/0f3469a6-95df-4adc-af85-b92837a02090) 在新项目中使用扫码/解码功能。只需要加载这个 **zxinglibrary** 模块即可。 ### 扫码过程 第一步: 打开摄像头,CameraManager cameraManager.startPreview(); 不断拍照获取bitmap: 第二步:开启新线程识别图片中二维码 ``` //带图片参数调用 core.jar方法解码 rawResult = multiFormatReader.decodeWithState(bitmap); // core.js中调用指定reader解码。那么 reader 作为一个接口,如果是二维码调用二维码方法解码 reader.decode(image, this.hints); // QRCodeReader 实现了Reader public class QRCodeReader implements Reader // 图片转化为矩阵,矩阵计算 BitMatrix bits = extractPureBits(image.getBlackMatrix()); // 定位二维码 //数据块识别 resultBytes for(int var11 = 0; var11 < var18; ++var11) { DataBlock dataBlock; byte[] codewordBytes = (dataBlock = var17[var11]).getCodewords(); int numDataCodewords = dataBlock.getNumDataCodewords(); this.correctErrors(codewordBytes, numDataCodewords); for(int i = 0; i < numDataCodewords; ++i) { resultBytes[resultOffset++] = codewordBytes[i]; } } ``` ![](https://git.yoqi.me/attachments/d28a7d2b-caac-40ae-a023-cc2bc22c87a3)
There is no content yet.
There is no content yet.

识别二维码比较简单,关键是定位二维码 detector 。 后续看一下相关论文。具体算法。并在此做一下笔记。

识别二维码比较简单,关键是定位二维码 detector 。 后续看一下相关论文。具体算法。并在此做一下笔记。
Sign in to join this conversation.
No Milestone
No assignee
1 Participants
Loading...
Cancel
Save
There is no content yet.