使用 Zxing ByQuadrantReader 扫描图像中的多个条形码:Nullpointer
Scanning multiple barcodes in an Image with Zxing ByQuadrantReader : Nullpointer
看起来像这样的类似问题。SO
我的要求是扫描上面有多个 barcodes/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 个二维码)。
我不确定结果点何时可以为空(我忘记了),但是是的,根据您的拉取请求,我们为这种情况添加了防御性空检查。
看起来像这样的类似问题。SO
我的要求是扫描上面有多个 barcodes/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 个二维码)。
我不确定结果点何时可以为空(我忘记了),但是是的,根据您的拉取请求,我们为这种情况添加了防御性空检查。