Android camera2 回调imagereader 从Image拿到YUV数据转化成RGB,生成bitmap并保存
时间: 2023-07-07 16:27:32 浏览: 220
好的,以下是一个简单的Android Camera2的ImageReader回调函数示例代码,用于将Image的YUV数据转换为RGB格式的Bitmap并保存到本地。在这个示例中,我们将使用JavaCV库来进行YUV转RGB的操作,并使用Bitmap类来保存图像。
```java
private ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireNextImage();
if (image == null) {
return;
}
// 获取图像的宽度和高度
int width = image.getWidth();
int height = image.getHeight();
// 将YUV数据转换为RGB格式的Bitmap
Mat yuvMat = new Mat(height + height / 2, width, CvType.CV_8UC1);
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
yuvMat.put(0, 0, data);
Mat rgbMat = new Mat(height, width, CvType.CV_8UC3);
Imgproc.cvtColor(yuvMat, rgbMat, Imgproc.COLOR_YUV2RGB_NV21);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Utils.matToBitmap(rgbMat, bitmap);
// 保存Bitmap到本地
String fileName = "image_" + System.currentTimeMillis() + ".jpg";
String filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + fileName;
try {
FileOutputStream outputStream = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
image.close();
}
};
```
请注意,这只是一个简单的示例代码,可能需要根据你的实际需求进行修改。
阅读全文