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.
- ¿Por qué el decodificador de MediaCodec no emite un formato YUV unificado (como YUV420P)?
- Convertir de YUV a RGB en c + + (android-ndk)
- El proceso de alojamiento del servicio de cámara ha muerto inesperadamente
- Decodificación de YUV a RGB en C / C ++ con NDK
- Convertir YUV-> RGB (procesamiento de imágenes) -> YUV durante onPreviewFrame en android?
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?
- Convertir matriz de mapa de bits a YUV (YCbCr NV21)
- Convertir el marco de vista previa en un mapa de bits
- Fuera de memoria al usar compresstojpeg en varios YuvImage uno a la vez
- Cómo mostrar la imagen de YUV en Android
- YUV_420_888 interpretación en Samsung Galaxy S7 (Camera2)
- Convertir android.media.Image (YUV_420_888) en mapa de bits
- Cómo convertir RGB565 a YUV420SP más rápido en Android?
- Convierta la matriz de bytes NV21 en formato legible de mapa de bits
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); } }); }
- ¿Es mala práctica o grosero hacer ContentResolver.setMasterSyncAutomatically en una aplicación android?
- recorte circular bitmap en android