0

我正在使用 zxing 核心并与我的拍照的 Android 应用程序集成。我将位图图片输入提供给 RGBLuminanceSource。但每次我得到 NOTFoundException。我不想通过意图或 CaptureActivity 与 zxing 条码扫描仪集成。这是代码。

       Map<DecodeHintType,Object> HINTS;
       Map<DecodeHintType,Object> HINTS_PURE;
       HINTS = new EnumMap<DecodeHintType,Object>(DecodeHintType.class);
       HINTS.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
       HINTS.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet.allOf(BarcodeFormat.class));
       HINTS_PURE = new EnumMap<DecodeHintType,Object>(HINTS);
       HINTS_PURE.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
       ImageView mImg;

       if (requestCode == SCANNER_REQUEST_CODE && resultCode == RESULT_OK) {  
          // Bitmap bMap = (Bitmap) data.getExtras().get("data");

        Bitmap bMap=BitmapFactory.decodeStream(getContentResolver().openInputStream(outputFileUri));


            // creating binary bitmap from source image


           int length=bMap.getWidth()*bMap.getHeight()*10;
           int[] intArray = new int[bMap.getWidth()*bMap.getHeight()]; 
           bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(),                bMap.getHeight());

           //test view to display captured image 
           mImg = (ImageView) findViewById(R.id.imageView);
           mImg.setImageBitmap(bMap);


           // zxing decoding of bitmap image
           Reader reader = new MultiFormatReader();
           String msg=bMap.getWidth()+" * "+bMap.getHeight();
           Log.e("DEBUGGG", msg);
           LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(),intArray);


           BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));


           Collection<Result> results = new ArrayList<Result>(1);
           ReaderException savedException = null;



           try {
                  // Look for multiple barcodes
                  MultipleBarcodeReader multiReader = new GenericMultipleBarcodeReader(reader);

                  Result[] theResults = multiReader.decodeMultiple(bitmap, HINTS);
                  if (theResults != null) {
                    results.addAll(Arrays.asList(theResults));
                  }
                } catch (ReaderException re) {
                    re.printStackTrace();
                  savedException = re;
                  re.printStackTrace();
                }


                if (results.isEmpty()) {
                    try {
                      // Look for pure barcode
                      Result theResult = reader.decode(bitmap, HINTS_PURE);
                      if (theResult != null) {
                        results.add(theResult);
                      }
                    } catch (ReaderException re) {
                      savedException = re;
                      re.printStackTrace();

                    }
                  }

                  if (results.isEmpty()) {
                    try {
                      // Look for normal barcode in photo
                      Result theResult = reader.decode(bitmap, HINTS);
                      if (theResult != null) {
                        results.add(theResult);
                      }
                    } catch (ReaderException re) {
                      savedException = re;
                      re.printStackTrace();
                    }
                  }

                  if (results.isEmpty()) {
                    try {
                      // Try again with other binarizer
                      BinaryBitmap hybridBitmap = new BinaryBitmap(new HybridBinarizer(source));
                      Result theResult = reader.decode(hybridBitmap, HINTS);
                      if (theResult != null) {
                        results.add(theResult);
                      }
                    } catch (ReaderException re) {
                      savedException = re;
                      re.printStackTrace();
                    }
                  }
                String barcoderesult="";
                  for (Result result : results) {
                      barcoderesult=barcoderesult+result.getText();
                      Log.e("Debugger","code:  " +result.getText() );
                    }

                //result is empty and notfound exception in logs
4

2 回答 2

0

是的,它通常解码得很好。最可能的答案是这个特定的图像没有扫描。试试没有阴影的,也许。您也可能没有正确解析图像。尝试其他图像以验证

于 2013-04-03T09:52:05.730 回答
0

我必须使用 bitmap.config 从输入流中创建 rgb 位图。

于 2013-04-03T13:55:22.763 回答