2013-04-03 110 views
0

我正在使用zxing核心并将其与我的android应用程序集成在一起拍摄照片。我将位图图片输入到RGBLuminanceSource。但每次我得到NOTFoundException。我不想通过intents或CaptureActivity与zxing条码扫描器集成。这是代码。com.google.zxing.NotFoundException解码包含条形码的图像的所有可能性

 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 
+0

为什么不实际显示你正在解码的形象呢? –

+0

@Sean这里是图像.. http://s1.postimg.org/pim8l22yn/product.jpg – tousif

+0

和条码Android应用程序可以读取此。 – tousif

回答

0

我不得不使用bitmap.config在输入流中的rgb中创建位图。

0

是的,它解码一般。最可能的答案就是这个特定的图像不扫描。也许,试试一个没有阴影的人。也有可能你没有正确解析图像。尝试其他图像来验证

+0

我试过不同的图像,没有阴影结果是一样的。甚至试图将图像保存到SD卡而不是读取和解码。任何帮助? – tousif

+0

然后调试你如何阅读图像。例如,您的代码建议您假定ARGB数据,但Android默认为YUV平面。你可能正在读噪音。 –

+0

如果我使用PlanarYUVLuminanceSource(byte [] yuvData,int dataWidth,int dataHeight,int left,int top, int width,int height,boolean reverseHorizo​​ntal)左边和上边可能是什么值。 dataheight可以和高度一样吗?怎么样datawidth – tousif

-2

这适用于我。我没有使用zxing。

添加到摇篮:

compile 'com.google.android.gms:play-services:7.8.0' 

代码:

if (requestCode == SCANNER_REQUEST_CODE && resultCode == RESULT_OK && null != data) { 
     Uri selectedImage = data.getData();   
     String textQR="";    

     Bitmap myQRCode = null; 
     try { 
      InputStream inputStream = getContentResolver().openInputStream(selectedImage); 
      myQRCode = BitmapFactory.decodeStream(inputStream); 
     } catch (IOException e) { 
      Toast.makeText(youractivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

     BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build(); 

     Frame myFrame = new Frame.Builder().setBitmap(myQRCode).build(); 

     SparseArray<Barcode> barcodes = barcodeDetector.detect(myFrame); 

     if (barcodes.size() > 0) { 
      textQR = barcodes.valueAt(0).displayValue; 
     } 
     else{ 
      Toast.makeText(youractivity.this, "QR not Found", Toast.LENGTH_LONG).show(); 
     } 
    } 
}