ZXing convertir mapa de bits a BinaryBitmap

Estoy utilizando OpenCV y Zxing, y me gustaría añadir 2d código de exploración. Tengo algunos tipos de imágenes que podría enviar. Probablemente lo mejor es Bitmat (la otra opción es OpenCV Mat).

Parece que solías ser capaz de convertir así:

Bitmap frame = //this is the frame coming in LuminanceSource source = new RGBLuminanceSource(frame); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); //then I can use reader.decode(bitmap) to decode the BinaryBitmap 

Sin embargo, RGBLuminaceSource parece que ya no toma un mapa de bits como una entrada. Entonces, ¿cómo puedo convertir una imagen de entrada a BinaryBitmap ???

Editar:

Ok, así que creo que he hecho algunos progresos, pero todavía estoy teniendo un problema. Creo que tengo el código que convierte el mapa de bits en el formato correcto, sin embargo ahora estoy recibiendo un arrayIndexOutOfBounds

 public void zxing(){ Bitmap bMap = Bitmap.createBitmap(frame.width(), frame.height(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(frame, bMap); byte[] array = BitmapToArray(bMap); LuminanceSource source = new PlanarYUVLuminanceSource(array, bMap.getWidth(), bMap.getHeight(), 0, 0, bMap.getWidth(), bMap.getHeight(), false); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new DataMatrixReader(); String sResult = ""; try { Result result = reader.decode(bitmap); sResult = result.getText(); Log.i("Result", sResult); } catch (NotFoundException e) { Log.d(TAG, "Code Not Found"); e.printStackTrace(); } } public byte[] BitmapToArray(Bitmap bmp){ ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 50, stream); byte[] byteArray = stream.toByteArray(); return byteArray; } 

Recibí el error

 02-14 10:19:27.469: E/AndroidRuntime(29736): java.lang.ArrayIndexOutOfBoundsException: length=33341; index=34560 02-14 10:19:27.469: E/AndroidRuntime(29736): at com.google.zxing.common.HybridBinarizer.calculateBlackPoints(HybridBinarizer.java:199) 

He registrado el tamaño del byte [], y es la longitud mostrada arriba. No puedo entender por qué zxing espera que sea más grande

Ok lo tengo Como dijo Sean Owen, PlanarYUVLuminaceSource sólo sería para el formato de cámara predeterminado para Android, que supongo que OpenCV no usa. Así que en resumen, aquí es cómo lo haría:

 //(note, mTwod is the CV Mat that contains my datamatrix code) Bitmap bMap = Bitmap.createBitmap(mTwod.width(), mTwod.height(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(mTwod, bMap); int[] intArray = new int[bMap.getWidth()*bMap.getHeight()]; //copy pixel data from the Bitmap into the 'intArray' array bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(),intArray); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new DataMatrixReader(); //....doing the actually reading Result result = reader.decode(bitmap); 

Así que eso es, no es difícil en absoluto. Sólo tenía que convertir el mapa de bits de Android a una matriz de números enteros, y es un pedazo de pastel.

 public static String readQRImage(Bitmap bMap) { String contents = null; int[] intArray = new int[bMap.getWidth()*bMap.getHeight()]; //copy pixel data from the Bitmap into the 'intArray' array bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(), intArray); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader();// use this otherwise ChecksumException try { Result result = reader.decode(bitmap); contents = result.getText(); //byte[] rawBytes = result.getRawBytes(); //BarcodeFormat format = result.getBarcodeFormat(); //ResultPoint[] points = result.getResultPoints(); } catch (NotFoundException e) { e.printStackTrace(); } catch (ChecksumException e) { e.printStackTrace(); } catch (FormatException e) { e.printStackTrace(); } return contents; } 

Bitmap es una clase de Android. El formato de imagen predeterminado de Android de la cámara es un formato plano YUV. Es por eso que sólo PlanarYUVLuminanceSource es necesario y existe para Android. RGBLuminanceSource tendría que ser portado.

Usted está poniendo completamente el tipo incorrecto de datos en la clase. Se esperan píxeles en formato YUV planar. Está pasando bytes comprimidos de un archivo JPEG.

  • GridLayoutManager spanSizeLookup error
  • Escaneo de códigos QR sin cámara de pantalla completa
  • Android ZXing Obtener imagen de código de barras
  • Escáner de código de barras zxing en una div fija en phonegap android app
  • ZXing Android Generar código de barras 1D
  • Zxing - Cambio de la vista de la cámara -90 grados
  • Cómo utilizar el resultado del escaneo ZXING
  • Android: la exploración del código de barras de zxing tuvo éxito pero no regresó de la actividad
  • Uso de zxing Barcode Scanner dentro de una página web
  • ZXing en Android PDF417
  • Biblioteca de escáner de código de barras para android que no sea zxing
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.