2013-02-27 67 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()); 
     } 
    }