Camera2 Image转NV21
项目需要对Android相机预览帧进行图像处理。而Camera2从ImageReader(设置通用的ImageFormat.YUV_420_888格式)中获取的是YUV格式数据。其中YUV本身只存储颜色信息,不包含图像宽高信息,回调后的YUV数据分别存储在Image Planes的3个数组中。
设置相机预览大小1920 * 1440后打印3个planes数组信息如下:
int width = image.getWidth();
int height = image.getHeight();
ByteBuffer buffer = planes[i].getBuffer();
int rowStride = planes[i].getRowStride();
int pixelStride = planes[i].getPixelStride();
Log.v(TAG, "pixelStride " + pixelStride);
Log.v(TAG, "rowStride " + rowStride);
Log.v(TAG, "width " + width);
Log.v(TAG, "height " + height);
Log.v(TAG, "buffer size " + buffer.remaining());

从上至下依次对应Y、U、V三个分量的buffer数据。可见Y的buffer大小就是width * height。U和V的buffer大小是width * height的1/2。
- 为什么是NV21格式?
NV21格式每四个Y分量共用一组U分量和V分量,Y连续排序,U与V交叉排序。即如下排列:
Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y
Y Y Y Y Y Y Y Y
Y Y Y Y


417

被折叠的 条评论
为什么被折叠?



