绪论
在上篇博客中已经总结了常用的两种像素格式YUV与RGB。本篇博客将用代码来实现两种像素格式间,和两种像素格式的转换。
视频宽高与不同像素格式占用的存储空间
例如:一个视频的视频宽度为Width、高度为Height 那么
像素格式 | 所占存储空间 |
---|---|
RGB16 | Width * Height * 2 |
– | – |
RGB24 | Width * Height * 3 |
– | – |
RGB32 | Width * Height * 4 |
– | – |
YUV420 | Width * Height * 1.5 |
– | – |
YUV422 | Width * Height * 2 |
– | – |
YUV444 | Width * Height * 3 |
RGB格式转换
RGB565与RGB24(RGB888)的互转
由前一张博客知道RGB565的存储方式所以可以使用位运算的方法提取出R\G\B数据
void rgb565_to_rgb888(unsigned char *image,unsigned char *image888)
{
unsigned char R,G,B;
B=(*image) & 0x1F;//000BBBBB
G=( *(image+1) << 3 ) & 0x38 + ( *image >> 5 ) & 0x07 ;//得到00GGGGGG00
R=( *(image+1) >> 3 ) & 0x1F; //得到000RRRRR
*(image888+0)=B * 255 / 63; // 把5bits映射到8bits去,有多种算法。
*(image888+1)=G * 255 / 127;
*(image888+2)=R * 255 / 63;
printf(