I use OpenCV and Zxing, and I would like to add 2d code scan. I have several types of images that I could send. Probably the best is Bitmat (another option is OpenCV Mat).
It looks like you used to be able to convert like this:
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
However, RGBLuminaceSource looks as if it does not accept a bitmap as input. So, how else can I convert the input image to BinaryBitmap ???
Edit:
Good, so I think I have made some progress, but I still have a problem. I think I have code that converts the bitmap to the correct format, however now I get an array ofIndexOutOfBounds
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; }
I get an 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)
I wrote the byte size [], and this is the length shown above. I can't understand why zxing expects it to be bigger