Похоже, похожая проблема выглядит следующим образом. 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) для одного и того же изображения.