YUV420、YUV422、RGB24转换

//平面YUV422转平面RGB24
static void YUV422p_to_RGB24(unsigned char yuv422[3], unsigned char rgb24, int width, int height)
{
int R,G,B,Y,U,V;
int x,y;
int nWidth = width>>1; //色度信号宽度
for (y=0;y

//平面YUV420转平面YUV422
static void YUV420p_to_YUV422p(unsigned char yuv420[3], unsigned char yuv422, int width, int height)
{
int x, y;
//亮度信号Y复制
int Ylen = widthheight;
memcpy(yuv422, yuv420[0], Ylen);
//色度信号U复制
unsigned char
pU422 = yuv422 + Ylen; //指向U的位置
int Uwidth = width>>1; //422色度信号U宽度
int Uheight = height>>1; //422色度信号U高度
for (y = 0; y < Uheight; y++)
{
memcpy(pU422 + ywidth, yuv420[1] + yUwidth, Uwidth);
memcpy(pU422 + ywidth + Uwidth, yuv420[1] + yUwidth, Uwidth);
}
//色度信号V复制
unsigned char pV422 = yuv422 + Ylen + (Ylen>>1); //指向V的位置
int Vwidth = Uwidth; //422色度信号V宽度
int Vheight = Uheight; //422色度信号U宽度
for (y = 0; y < Vheight; y++)
{
memcpy(pV422 + y
width, yuv420[2] + yVwidth, Vwidth);
memcpy(pV422 + y
width + Vwidth, yuv420[2] + y*Vwidth, Vwidth);
}
}

//平面YUV420转RGB24
static void YUV420p_to_RGB24(unsigned char yuv420[3], unsigned char rgb24, int width, int height)
{
// int begin = GetTickCount();
int R,G,B,Y,U,V;
int x,y;
int nWidth = width>>1; //色度信号宽度
for (y=0;y

//防止越界
if (R>255)R=255;
if (R

Original: https://www.cnblogs.com/liangxiaofeng/p/6943548.html
Author: 默默淡然
Title: YUV420、YUV422、RGB24转换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552407/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球