上述4种是常见的几种颜色编码方法,常使用在照片或者视频处理代码中,多配合jni 代码使用。如果碰到诸如下面列举的这种代码:
//声明部分
private byte[] yuv = null;
private byte[] yuvr = null;
private byte[] rgb = null;
private byte[] rgba = null;
yuv = new byte[frame.size.width * frame.size.height * 3 / 2];
yuvr = new byte[frame.size.width * frame.size.height * 3 / 2];
rgb = new byte[frame.size.width * frame.size.height * 3];
rgba = new byte[frame.size.width * frame.size.height * 4];
这个代码的意思其实是:定义视频的一帧或者是图片(frame)所有像素所占存储空间(Byte数组)的大小。
上面代码的rgb指的是标准rgb24,对于rgb24,每个像素为3个字节,所以整个帧图所占的byte数组的总大小是宽 X 高 X 3。如果用的是32的rgb,那么每个像素就变成了4个字节,上面的代码就不是乘3,而是乘4了,其他的都同理理解。
android手机摄像头采集的预览数据,一般都是yuv格式下的nv21格式,所以每当涉及格式转换的情况,上面贴的代码都是转换前必不可少的,比如项目中添加so库,调用jni方法将nv21的格式转换成1420格式
if(rgb == null)
{
yuv = new byte[frame.size.width * frame.size.height * 3 / 2];
yuvr = new byte[frame.size.width * frame.size.height * 3 / 2];
rgb = new byte[frame.size.width * frame.size.height * 3];
rgba = new byte[frame.size.width * frame.size.height * 4];
}
MainActivity.vpxCoder.NV21ToI420(frame.image, yuv, frame.size.width, frame.size.height);
本文探讨了Android中常见的RGB、RGBA、YUV、YUVR四种颜色编码方式,尤其是在照片和视频处理中的应用,特别是与JNI代码的配合。以RGB24为例,解释了每个像素占用字节数及其影响到的图像数据存储空间计算,如宽度乘以高度乘以每个像素的字节数。同时提到了Android摄像头预览数据通常采用的NV21格式,在进行格式转换时如何计算所需存储空间。
5962

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



