图像有两种数值表示方法,它们分别是RGB表示方式和YUV表示方式
RGB表示方式:像素包含了浮点表示和整数表示
1.浮点表示:取值范围为0.0~1.0,比如,在OpenGL ES中对每一个像素点的表示
2.整数表示:取值范围为0~255,8个比特表示要给子像素,32个比特表示一个像素,类似于RGBA_8888数据格式。还有RGB_565数据格式,即是使用16个比特表示一个像素,R用5个比特表示,G用6个比特表示,B用5个比特表示
例如当前使用的手机一般都是1920*1080,它代表的是手机屏幕里面有1920行,每行包括了1080个像素。所以它的图像如果按照RGBA_8888格式计算的话,那么就是1920*1080*32/8/1024/1024=7.91MB。这就是位图在内存中所占用的大小,所以每一张图的裸数据是很大的。
YUV表示方式:主要应用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的有点在于只需要占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中Y表示明亮度;U和V表示色,它们的作用是描述影像的色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输⼊信号来建⽴的,⽅法是将RGB信号的特定部分 叠加到⼀起。“⾊度”则定义了颜⾊的两个⽅⾯——⾊调与饱和度,分别⽤ Cr和Cb来表⽰。其中,Cr反映了RGB输⼊信号红⾊部分与RGB信号亮度值 之间的差异,⽽Cb反映的则是RGB输⼊信号蓝⾊部分与RGB信号亮度值之 间的差异。 之所以采⽤YUV⾊彩空间,是因为它的亮度信号Y和⾊度信号U、V是 分离的。如果只有Y信号分量⽽没有U、V分量,那么这样表⽰的图像就是 ⿊⽩灰度图像。彩⾊电视采⽤YUV空间正是为了⽤亮度信号Y解决彩⾊电 视机与⿊⽩电视机的兼容问题,使⿊⽩电视机也能接收彩⾊电视信号,最 常⽤的表⽰形式是Y、U、V都使⽤8个字节来表⽰,所以取值范围就是0~ 255。在⼴播电视系统中不传输很低和很⾼的数值,实际上是为了防⽌信号 变动造成过载,因⽽把这“两边”的数值作为“保护带”,不论是Rec.601还是 BT.709的⼴播电视标准中,Y的取值范围都是16~235,UV的取值范围都 是16~240。而且,相较于RGB,在相同的1920*1080下,如果使用YUV420P的格式表示,它的数据量大小为:1920*1080*8/8/1024/1024+1920*1080*4/8/1024/1024=2.96MB。即使如此,如果每张图片都差不多3M,那么一部电影90分钟,那么整部电影放下来:2.96*24*60*90/1024=374.625GB,这么大的空间,哪部手机也承受不了。所以需要进行压缩
I420: YYYYYYYY UU VV ->YUV420P
YV12: YYYYYYYY VV UU ->YUV420P
NV12: YYYYYYYY UVUV ->YUV420SP
NV21: YYYYYYYY VUVU ->YUV420SP
视频编码:Mpeg H264