Сканирование нескольких штрих-кодов в изображении с помощью Zxing ByQuadrantReader: Nullpointer - PullRequest
0 голосов
/ 22 октября 2018

Похоже, похожая проблема выглядит следующим образом. 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.Это дало мне показания на 2 штрих-кодах из 6 на изображении.Однако, используя ByQuadrantReader с вышеуказанным исправлением, он дал мне 3 показания (2 штрих-кода и 1 qr) для одного и того же изображения.

1 Ответ

0 голосов
/ 27 октября 2018

Я не уверен, когда результирующие точки могут быть нулевыми (я забыл), но да, для вашего запроса на извлечение мы добавили защитную нулевую проверку для этого случая.

...