ZXing:使用 UPC + 5 补充扫描条形码

Yi *_* H. 5 android barcode-scanner zxing

我正在尝试使用 ZXing 库扫描如下所示的条形码。 条码图像
(来源:minus.com

// start scanning
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent, REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

如果我替换"ONE_D_MODE""TWO_D_MODE",应用程序可以成功检测到这两个条形码;但 的值result不会改变(仍然是 051488005995)。

// onActivityResult
if(requestCode == REQUEST_CODE && resultCode == RESULT_OK)
    String result = intent.getStringExtra("SCAN_RESULT");
Run Code Online (Sandbox Code Playgroud)

有没有办法同时获取条形码值 051488005995 和 50115?

任何其他获取条形码上方的 isbn (0142501158) 而不获取补充 +5 条形码 (50115) 的方法也很好。

谢谢。

Sec*_*one 0

据我所知,通过 Intent 使用 zxing 是不可能的。

但是,您可以直接将 ZXing 嵌入到代码中(通过将 ZXing 源添加到代码目录中)。然后您就可以使用com.google.zxing.MultipleBarcodeReader. 该函数decodeMultiple()返回一个条形码数组,然后可以对其进行进一步处理。


一个小例子:

// data: YUV camera preview; width/height: preview size
Result[] decode(byte[] data, int width, int height) {
    PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    MultipleBarcodeReader reader = new MultipleBarcodeReader(new MultiFormatOneDReader(null));
    return reader.decodeMultiple(bitmap);
}
Run Code Online (Sandbox Code Playgroud)