OnPreviewFrame data image to imageView

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

he conseguido iniciar la vista previa y mostrarlo en una superficieView, pero no sé cómo convertir los datos de byte [] (que viene en formato Yuv creo) en un mapa de bits RGB para mostrarlo en un imageView.

el código que estoy intentando 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 de vista previa es esta

 @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 previsualización funciona, pero la imageView permanece vacía

¿Alguna idea?

Es posible que no haya abierto la cámara en el hilo de la interfaz de usuario. Sin embargo, debe asegurarse de que setImageBitmap se llame en el subproceso 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); } }); } 
  • Rotación de la imagen YUV420 / NV21 en android
  • Imágenes verdes al hacer una codificación JPEG desde YUV_420_888 utilizando la nueva cámara Android2 api
  • Rotar una matriz de bytes YUV en Android
  • Android cámara2 jpeg framerate
  • Cómo convertir el formato de imagen NV21 en mapa de bits?
  • Problemas al escalar una imagen YUV utilizando la biblioteca libyuv
  • Cámara adecuada2 YUV_420_888 a conversión de JPEG
  • Convertir la cámara Android api YUV_420_888 a RGB
  • La manera más rápida de dibujar un marco de vídeo decodificado con MediaCodec a la pantalla?
  • Camera.PreviewCallback equivalente en Camera2 API
  • Camera2 api convertir yuv420 a rgb verde hacia fuera
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.