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?