ZXing: сканирование штрих-кода с помощью UPC + 5 дополнительных - PullRequest
3 голосов
/ 17 декабря 2011

Я пытаюсь отсканировать штрих-код, как показано ниже, используя библиотеку ZXing. Изображение штрих-кода http://i.minus.com/ih2b9lavDxOSP.png

// start scanning
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent, REQUEST_CODE);

Если я заменим "ONE_D_MODE" на "TWO_D_MODE", приложение сможет успешно обнаружить оба штрих-кода; но значение result не изменится (по-прежнему 051488005995).

// onActivityResult
if(requestCode == REQUEST_CODE && resultCode == RESULT_OK)
    String result = intent.getStringExtra("SCAN_RESULT");

Есть ли способ получить значение штрих-кода 051488005995 и 50115?

Любой другой способ получить isbn (0142501158) над штрих-кодами без получения дополнительного +5 штрих-кода (50115) также был бы хорош.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

ONE_D_MODE будет работать для вас.Вы, вероятно, действительно хотите PRODUCT_MODE.Нет такой вещи как TWO_D_MODE.При установке этого он просто сканирует все форматы по умолчанию.

Он не сканирует оба штрих-кода.Это просто сканирование кода продукта.Поэтому я не уверен, что вы имеете в виду, когда получаете только код продукта: это то, что у вас уже есть.Я предполагаю, что вы хотите и то и другое.

MultipleBarcodeReader не совсем для этой ситуации, так как ни одна из частей сканирования библиотек для дополнения UPC / EAN сама по себе.Он сканируется только как расширение кодов UPC и EAN.

Он уже сканирует некоторые типы штрих-кодов расширения в UPCEANExtensionSupport.Он не возвращает необработанные значения, а скорее пытается проанализировать метаданные и возвращает их в метаданных результата.Если это то, что вы действительно хотите, он уже делает это.В противном случае вам придется изменить код.

Если он читает код UPC / EAN, но не может найти код расширения, он не завершит проверку и вернет только основной код.Если вы хотите, чтобы он возвращался только в том случае, если оба найдены, вам снова придется изменить свою копию базовой библиотеки.

1 голос
/ 08 сентября 2014

Между прочим, вы можете сканировать коды UPC 12 + 5 через Intent / zxing.Единственная загвоздка в том, что вам нужно нажать +5, чтобы вы не могли сканировать нормальные штрих-коды.

Из моей темы с @srowen: https://github.com/zxing/zxing/issues/217#issuecomment-54818496

Вставил подсказку как дополнительнуюв Intent, внутри IntentIntegrator => initiateScan (я должен буду сделать переопределенный метод, чтобы сделать этот опциональный позже):

// Force 5 digit extension
intentScan.putExtra("ALLOWED_EAN_EXTENSIONS", new int[] {5});

Я подтвердил, что это было распознано из моего Android LogCat:

DecodeHintManager﹕ Hints from the Intent: {ALLOWED_EAN_EXTENSIONS=[I@42a38540}

Полученные значения расширений в результате сканирования:

String extension = intent.getStringExtra("SCAN_RESULT_UPC_EAN_EXTENSION");

Теперь я получил UPC 12 + 5:)

Content:079808007955, Format:UPC_A, Extension: 74700
0 голосов
/ 17 декабря 2011

Насколько я знаю, это невозможно при использовании zxing через Intent.

Однако вы можете встроить ZXing в свой код напрямую (добавив исходный код ZXing в каталог кода).Тогда вы сможете использовать com.google.zxing.MultipleBarcodeReader.Функция decodeMultiple() возвращает массив штрих-кодов, которые затем могут быть обработаны в дальнейшем.


Небольшой пример:

// data: YUV camera preview; width/height: preview size
Result[] decode(byte[] data, int width, int height) {
    PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    MultipleBarcodeReader reader = new MultipleBarcodeReader(new MultiFormatOneDReader(null));
    return reader.decodeMultiple(bitmap);
}
...