Android USB串口摄像头实现拍照与识别二维码

二维码现在用的超级多,其实它就是一种编码,把字符串编码保存成一个图片,我们扫描图片得到字符串就解码成功。

最有名的二维码解析库是 google 出品的 Zxing,网上也有很多的封装库,有自定义扫描窗口等,更多库请在这个库中搜索 二维码即可

USBUVCCamera源码已上传至github:https://github.com/z-jc/AndroidUSBCamera-master

里面带有拍照和扫码两个功能,主要说一下扫码的原理及实现:

在USBCameraActivity这个activity里面有一个回调方法onPreviewResult(),拿到byte[]  nv21Yuv这个字节流就是当前预览到的视图,对这个视图进行二维分析即可;

CodeUtils.analyzeBitmap这个方法是libzxing这个库里面的东西,不做多解释;

mCameraHelper.setOnPreviewFrameListener(new AbstractUVCCameraHandler.OnPreViewResultListener() {
                @Override
                public void onPreviewResult(final byte[] nv21Yuv) {
                    //获取预览图片流
                    if (isFlagQrCode) {
                        isFlagQrCode = false;
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                YuvImage yuvImage = new YuvImage(nv21Yuv, ImageFormat.NV21, 640, 480, null);
                                ByteArrayOutputStream bos = new ByteArrayOutputStream(nv21Yuv.length);
                                boolean result = yuvImage.compressToJpeg(new Rect(0, 0, 640, 480), 100, bos);
                                if (!result) {
                                    return;
                                }
                                byte[] buffer = bos.toByteArray();
                                Bitmap bmp = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);
                                //识别二维码/条形码
                                CodeUtils.analyzeBitmap(bmp, new CodeUtils.AnalyzeCallback() {
                                    @Override
                                    public void onAnalyzeSuccess(Bitmap mBitmap, final String result) {
                                        isFlagQrCode = false;
                                        Intent intent = new Intent();
                                        intent.putExtra("qrcode", result);
                                        setResult(102, intent);
                                        USBCameraActivity.this.finish();
                                    }

                                    @Override
                                    public void onAnalyzeFailed() {//二维码有误
                                        isFlagQrCode = true;
                                    }
                                });
                            }
                        }).start();
                    }
                }
            });

猜你喜欢

转载自blog.csdn.net/qq_32136827/article/details/83040657