一:简介
颜色空间:一个三维坐标系统,用一个点表示一种颜色。
RGB颜色空间:由红、绿、蓝三个基本元素组成,即:由红、绿、蓝三个颜色的灰度图组成。
YUV颜色空间:每一种颜色有一个亮度信号Y,和两个色度信号U、V。(YCrCb:C == color,R: == red,B:blue)
YUV基于RBG信息,从全彩色图像中产生一个黑白图像的亮度信号Y,在从R、G、B颜色中产生两个额外的信号(U、V)来描述颜色。
二:存储
RGB:
R:红色信息,占用一字节(8bit)
G:绿色信息,占用一字节(8bit)
B:蓝色信息,占用一字节(8bit)
常见:RGB565、RGB666、RGB888
YUV:YUV444
Y:亮度信息,占用一字节(8bit)
U:色度信息,占用一字节(8bit)
V:色度信息,占用一字节(8bit)
表示一个像素点,需要3byte。
YUV:YUV422
Y:亮度信息,占用一字节(8bit)
U:色度信息,占用一字节(8bit)
V:色度信息,占用一字节(8bit)
表示一个像素点平均需要2byte。4byte一个宏像素包含两个像素点的信息,平均一个像素就是2byte了。
三:YUV422 <==> RGB565
//converting YUV422 to RGB565
r = (unsigned char)(y + 1.4075 *(v-128));
g = (unsigned char)(y - 0.3455 *(u - 128) - 0.7169 *(v - 128));
b = (unsigned char)(y + 1.779 *(u - 128));
疑惑:
对于一个像素点:
将转换的的得到的r、g、b,存入BMP文件时,
以 unsigned short rgb565 = r(5bit) g(6bit) b(5bit) //颜色深度 16bit
以rgb565写入时,显示的图像,框架正确,就是颜色有些乱,
以 unsigned char rgbbuffer [ 3] 这样一个模式写入 BMP文件时,就正常了,颜色深度 24bit