2013-02-27 49 views
10

我目前正在开发一个扫描器读取一个图像中发现多个QR码一个图像读取多个QR码。 我设法读取图像中的QR码,但它给我不一致的结果。假设图像中有4个QR码,有时我可以读取2个,有时可以读取3个,也可以只读1.与原始扫描仪(ZXing扫描仪)不同,它可以快速解码。在我的情况下,我必须确保有足够的光线,并且图像没有模糊来解码。如何使用斑马线库

我使用的QRCodeMultiReader对图像进行解码。目前使用ZXing库来创建应用程序。

下面是我的代码片段:

public void onPictureTaken(byte[] data, Camera camera) { 
    BitmapFactory.Options opt = new BitmapFactory.Options(); 
    opt.inMutable = true; 
    Bitmap bitmap = BitmapFactory 
      .decodeByteArray(data, 0, data.length, opt); 
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); 
    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); 
    LuminanceSource source = new RGBLuminanceSource(bitmap); 

    QRCodeMultiReader multiReader = new QRCodeMultiReader(); 
    Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
    new HybridBinarizer(source)), hints); 
} 
+1

有你发现任何完美的解决方案,以读取多个条形码?/ – 2014-06-23 08:16:30

+0

不幸我不是因为我们停止了该功能的开发。但将继续寻找解决方案,尤其是我回到了android。 – 2014-06-24 00:37:17

+0

好吧,你可以分享我代码你以前试过的吗? – 2014-06-24 04:57:57

回答

0

您好,请在斑马线条形码扫描应用程序它在设置选项,以扫描批量条码,这样你们启用它,并检查它ü可以读取多重QR码查询一次从一个或多个图像中检查Zxing库的源代码以了解详细信息。

https://code.google.com/p/zxing/

+0

没有注意到我可以更改设置以扫描zxing扫描仪中的多个代码,谢谢。将再次调试zxing扫描器源代码。 – 2013-02-27 10:09:05

+1

批量扫描与一次读取多个条形码无关,但连续读取多个条形码。在应用程序中没有选项可以一次扫描多个条形码,但在库中有。 – 2013-02-27 10:16:45

+0

@SeanOwen是的,应用程序的唯一选择是连续读取几个条形码,但不能一次读取。但在图书馆,结果并不一致,对如何从相机怎么把图像中我到底有什么建议,我使用'camera.takePicture(NULL,NULL,mPicture)'得到它。 这是一个有点挑战性调试斑马线库,我注意到的是有一个resultpointcallbacks,我不确定它是如何工作或如何得到它还是什么它。 – 2013-02-28 01:32:48

0

我已创建了一个应用程序的相机,我已经使用intent作为默认的摄像头应用程序是有每的Andriod操作系统,他们一般都为该设备编写一个普通的摄像头应用程序,它会进行优化,更好地优化仅适用于您的手机...因此相机可以更好地使用intent

用于从单个图像提取的多个QR我试图下面的代码。
但结果并不一致一段时间,我得到1或2或3出4一段时间没有....它不是完美的解决方案

if(photo == null) 
     return; 
    Bitmap ScaledQr = null; 
    ScaledQr = Bitmap.createScaledBitmap(photo, 640,480, false); 
    BinaryBitmap Qr = BitMap2BinayBitmap(ScaledQr); 
    Result [] kpResultMulti = null; 
    Result kpResultSingle = null; 
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); 
    hints.put(DecodeHintType.TRY_HARDER, true); 
    //hints.put(DecodeHintType.PURE_BARCODE, true); 

    try { 
     kpResultMulti = kpReaderArr.decodeMultiple(Qr,hints); 
    } catch (NotFoundException e) { 
     // TODO Auto-generated catch block 
     msbox("Exception","NotFoundException"); 
     e.printStackTrace(); 
    } 

    if(kpResultMulti != null){ 
     msbox("Total Result" ,kpResultMulti.length +"");// + photo.getWidth() +  "Height=" + photo.getHeight()); 
     for(Result kp : kpResultMulti) 
     { 

      msbox("Results",kp.getText()); 
     } 
    }