ZXing二维码识别优化

2019-08-27  本文已影响0人  Allenlll

问题:二维码识别,如果图片中二维码太小就识别不出来
解决方案:

  /**
     * 缩小图片至,MAX_QRCODE_SIXE
     *
     * @param image
     * @return
     */
    fun resizeToMaxSize(image: Bitmap?): Bitmap? {
        if(image == null){
            return null
        }
        var height = MAX_QRCODE_SIXE
        var width = MAX_QRCODE_SIXE
        if (image.width > image.height) {
            width = (height * (image.width.toDouble() / image.height)).toInt()
        } else {
            height = (width * (image.height.toDouble() / image.width)).toInt()
        }
        var bitmap: Bitmap? = null
        try {
            bitmap = Bitmap.createScaledBitmap(image, width, height, true)
        } catch (e: OutOfMemoryError) {
            e.printStackTrace()
        }
        return bitmap
    }
 private fun getBitmapFromView(view: View?):Bitmap?{
        var bitmap:Bitmap? = null
        view?.run {
            try {
                bitmap = Bitmap.createBitmap(view.width,view.height,Bitmap.Config.RGB_565)
                var canvas = Canvas(bitmap!!)
                view.draw(canvas)
            } catch (e: OutOfMemoryError) {
                e.printStackTrace()
            } catch (e: Exception) {
                e.printStackTrace()
            }

        }
        return bitmap
    }

   var hint = HashMap<DecodeHintType,BarcodeFormat>()
                hint.put(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE)
                rawResult = mQRCodeReader.decode(bitmap,hint)

二维码基础

  1. HybridBinarizer:混合的二值化器,继承自GlobalHistogramBinarizer。 识别要慢一点,但更有效,专门针对白色背景连续黑块的二维码设计的。更适合解析有阴影和渐变的二维码图像。
  2. GlobalHistogramBinarizer:全局直方图二值化器。GlobalHistogramBinarizer:适合低端设备,对cpu和内存要求不高,选择全部黑点计算,无法处理阴影和渐变
  3. PlanarYUVLuminanceSource平面的YUV,YUV是一种颜色编码方式,Y表示亮度(Lunimance:明亮度),UV是色度。平面的YUV亮度源。一般相机识别出来的图像要用这种方式。
上一篇下一篇

猜你喜欢

热点阅读