获取 ZXing Reader 解码位图

Posted

技术标签:

【中文标题】获取 ZXing Reader 解码位图【英文标题】:Get ZXing Reader to decode a bitmap 【发布时间】:2011-09-05 15:05:52 【问题描述】:

我还不能用 ZXing 解码二维码。我正在使用来自 buglabs.net 的 BUG,但问题似乎与硬件无关,而与图像格式有关。

这是我目前所拥有的:

try 
    LuminanceSource source = new AWTImageLuminanceSource(bimage);
    bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
    Result result = reader.decode(bitmap, hints) ;
    System.out.println("result is:" + result.getText());
     catch (ReaderException re) 
            System.out.println("I can't find a barcode here");
    

代码在 reader.decode(bitmap, hints) 处中断。我收到带有以下跟踪的 ​​NullPointerException:

java.lang.NullPointerException
    at qrcoder.QRCoder.shoot(QRCoder.java:152) // this is the camera shoot function
    at qrcoder.QRCoder.buttonEvent(QRCoder.java:89) // press button
    at com.buglabs.bug.input.pub.InputEventProvider.run(InputEventProvider.java:90)

不确定 InputEventProvider 试图告诉我什么。

非常感谢, 萨拉

不确定如何,但 Reader 从未被写入。最后,将 Reader 自己的源代码替换回函数中,直接使用 Decoder 代替。

private void shoot() throws IOException, NotFoundException, FormatException,     ChecksumException 
    // take the picture
    Hashtable hints = null;
    DecoderResult decoderResult;
    cameraLED.setLEDFlash(true);
    camera.grabPreview(buf);
    camera.grabPreview(buf);
    cameraLED.setLEDFlash(false);
    InputStream in = new ByteArrayInputStream(camera.grabFull());
    BufferedImage bImageFromConvert = ImageIO.read(in);
    LuminanceSource source = new BufferedImageLuminanceSource(bImageFromConvert);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    ResultPoint[] points;

      final Decoder decoder = new Decoder();
      DetectorResult detectorResult = new Detector(bitmap.getBlackMatrix()).detect(hints);
      decoderResult = decoder.decode(detectorResult.getBits(), hints);
      points = detectorResult.getPoints();
      Result result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), points, BarcodeFormat.QR_CODE);

    if (result.getText() != null)
        System.out.println("result is:" + result.getText());
                   
        else System.out.println("bitmap is null");     


    ic.repaint();

现在可以了,谢谢!

【问题讨论】:

【参考方案1】:

项目中有BUG的示例代码,由BUG大佬提供。见bug/。不过已经很老了。

QRCoder 是你的班级,不是吗?所以不知道是BUG还是库的问题。

【讨论】:

该库运行良好 - 我直接从 Bug Labs 人员那里得到它。我暂时没有使用相机,我正在将图像直接导入到函数中。 终于通过用自己的源代码替换 Reader 来实现它。不知道怎么做,但读者从来没有被写过。

以上是关于获取 ZXing Reader 解码位图的主要内容,如果未能解决你的问题,请参考以下文章

使用 zxing 读取图像中的二维码

Zxing 仅包含一个字符时无法解码一维条码 128

C# - 使用 ZXing.Net 解码 png QR 码

J2me,我需要一个不是 Zxing 的 datamatrix 解码器库

Java二维码生成与解码工具Zxing使用

获取条形码解码的 NULL 值