android bitmap android-camera yuv

android - Imagen de datos de OnPreviewFrame en imageView



bitmap android-camera (1)

Es posible que no haya abierto la Cámara en el hilo de la interfaz de usuario. Sin embargo, debe asegurarse de que se llama a setImageBitmap en el hilo de la interfaz de usuario:

@Override public void onPreviewFrame(final byte[] data, Camera camera) { Camera.Parameters parameters = camera.getParameters(); int width = parameters.getPreviewSize().width; int height = parameters.getPreviewSize().height; YuvImage yuv = new YuvImage(data, parameters.getPreviewFormat(), width, height, null); ByteArrayOutputStream out = new ByteArrayOutputStream(); yuv.compressToJpeg(new Rect(0, 0, width, height), 50, out); byte[] bytes = out.toByteArray(); final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); MyActivity.this.runOnUiThread(new Runnable() { @Override public void run() { ((ImageView) findViewById(R.id.loopback)).setImageBitmap(bitmap); } }); }

Estoy tratando de obtener el byte [] de la vista previa de la cámara, convertirlo a mapa de bits y mostrarlo en una vista de imagen con imageView.setImageBitmap ()

He logrado iniciar la vista previa y mostrarla en SurfaceView, pero no sé cómo convertir los datos de byte [] (que vienen en formato Yuv, creo) en un mapa de bits RGB para mostrarlo en un imageView.

el código que intento es el siguiente:

camera = camera.open(); parameters = camera.getParameters(); camera.setParameters(parameters); surfaceHolder = surfaceView.getHolder(); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); camera.setPreviewDisplay(surfaceHolder); camera.setPreviewCallback(this); camera.startPreview();

y la devolución de llamada previa es esto

@Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Parameters parameters = camera.getParameters(); int width = parameters.getPreviewSize().width; int height = parameters.getPreviewSize().height; ByteArrayOutputStream outstr = new ByteArrayOutputStream(); Rect rect = new Rect(0, 0, width, height); YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,width,height,null); yuvimage.compressToJpeg(rect, 100, outstr); Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size()); imgView1.setImageBitmap(bmp); }

La vista previa funciona pero el imageView permanece vacío

¿Alguna idea?