package com.king.zxing.analyze
import com.google.zxing.BinaryBitmap
import com.google.zxing.DecodeHintType
import com.google.zxing.LuminanceSource
import com.google.zxing.MultiFormatReader
import com.google.zxing.Result
import com.google.zxing.common.GlobalHistogramBinarizer
import com.google.zxing.common.HybridBinarizer
import com.king.zxing.DecodeConfig
/**
* 多格式分析器:主要用于分析识别条形码/二维码
*
* @author Jenly
*
* Follow me
*/
open class MultiFormatAnalyzer @JvmOverloads constructor(
decodeConfig: DecodeConfig = DecodeConfig()
) : BarcodeFormatAnalyzer(decodeConfig) {
constructor(hints: Map?) : this(DecodeConfig().setHints(hints))
override fun decode(source: LuminanceSource, isMultiDecode: Boolean): Result? {
var result: Result? = null
runCatching {
runCatching {
// 采用HybridBinarizer解析
result = reader.decodeWithState(BinaryBitmap(HybridBinarizer(source)))
}
if (isMultiDecode && result == null) {
// 如果没有解析成功,再采用GlobalHistogramBinarizer解析一次
result = reader.decodeWithState(BinaryBitmap(GlobalHistogramBinarizer(source)))
}
}
return result
}
override fun createReader(): MultiFormatReader {
return MultiFormatReader().apply {
setHints(decodeConfig.getHints())
}
}
}