Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a simple way to turn the byte array from the camera's onPreviewFrame into a picture in android?

I ask if there is a simple way because there is a google issue report saying that using decodeByteArray isn't possible. But that report originated in 2008 and I was hoping there was a solution not posted on there. The method listed on the issue report was to decode the format yourself, but I'd prefer to not have to put that in and slow down the program. Any help at all would be appreciated.

like image 763
RyoxSinfar Avatar asked Jul 23 '10 19:07

RyoxSinfar


2 Answers

I'm assuming your byte array is from the camera preview? If so you have to decode it but with 2.2 it's quite easy now.

Create a YUV image from the byte array as the data will only be in ImageFormat.NV21( int code 17)

img = new YuvImage(imgData, ImageFormat.NV21, width, height, null);

Create a rectangle the same size as the image.

Create a ByteArrayOutputStream and pass this, the rectangle and the compression value to compressToJpeg().

Then you can use

Bitmap mBitmap = BitmapFactory.decodeByteArray(outputStream.toByteArry(),0,outputStream.size());

I use this for every frame in the callback and it works fine. Hope this helps.

like image 140
James Burnstone Avatar answered Oct 19 '22 17:10

James Burnstone


The easiest way is to create a BufferedImage the following way:

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0. data.length);

data is the byte array.

like image 39
RoflcoptrException Avatar answered Oct 19 '22 19:10

RoflcoptrException