簡體   English   中英

使用Zxing掃描圖像中的多個條形碼ByQuadrantReader:Nullpointer

[英]Scanning multiple barcodes in an Image with Zxing ByQuadrantReader : Nullpointer

看起來像是類似的問題。 所以

我的要求是掃描上面有多個條形碼/二維碼的圖像。 我正在使用zxing 3.3.3。

我做了什么。

private static void scan(byte[] imageBytes) {
        BufferedImage image = ImageUtils.byteArrayToBufferedImage(imageBytes);

        LuminanceSource source = new BufferedImageLuminanceSource(image);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

        ByQuadrantReader byQuadrantReader = new ByQuadrantReader(reader);
        GenericMultipleBarcodeReader multipleBarcodeReader = new GenericMultipleBarcodeReader(byQuadrantReader);
        Result[] results = multipleBarcodeReader.decodeMultiple(bitmap);

        foreach(Result result : results) {
                System.out.println(result.getText());
        }
} 

在這里,multipleBarcodeReader.decodeMultiple(bitmap)拋出NullPointerException。 它從這里拋出。

  private static void makeAbsolute(ResultPoint[] points, int leftOffset, int topOffset) {
        if (points != null) {
            for (int i = 0; i < points.length; i++) {
                 ResultPoint relative = points[i];
                 points[i] = new ResultPoint(relative.getX() + leftOffset, relative.getY() + topOffset);

它位於com.google.zxing.multi.ByQuadrantReader.java行號110中。我下載了源代碼並更新了代碼,以檢查是否為空。

    ResultPoint relative = points[i];
    if (relative != null) {
      points[i] = new ResultPoint(relative.getX() + leftOffset, relative.getY() + topOffset);
    }

現在工作正常。 是錯誤還是我做錯了什么? 順便說一句,當我不使用ByQuadrantReader時,它的工作正常。 它使我可以讀取圖像中6個條形碼中的2個條形碼。 但是,通過在上述修復程序中使用ByQuadrantReader,可以為同一張圖像提供3個讀數(2個條形碼和1個qr)。

我不確定結果何時可以為空(我忘記了),但是是的,根據您的請求請求,我們在這種情況下添加了防御性的空檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM