类似这样的问题。SO
我的要求是扫描上面有多个条形码/ qr码的图像。我正在使用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)。
答案 0 :(得分:0)
我不确定结果点何时可以为空(我忘记了),但是是的,根据您的请求请求,我们在这种情况下添加了防御性的空检查。