YUV422 转换成 RGB

#define CLIPVALUE(x, minValue, maxValue) ((x) < (minValue) ? (minValue) : ((x) > (maxValue) ? (maxValue) : (x)))
#define YUVToR(Y, U, V) ( (Y) + 1.4075 * ((V) - 128) )
#define YUVToG(Y, U, V) ( (Y) - 0.3455 * ((U) - 128) - 0.7169 * ((V) - 128) )
#define YUVToB(Y, U, V) ( (Y) + 1.779 * ((U) - 128) )

bool MyVideo::yuv422torgb(unsigned char *rgbImageData, unsigned char *yuvImageData, short width, short height)
{
	if (yuvImageData == NULL)
	{
		return -1;
	}

	if (rgbImageData == NULL)
	{
		rgbImageData = (unsigned char*)malloc(width * height * 3);
	}

	int y, u, v;
	int frame_size = width * height;

	for (int j = 0; j < height; j++)
	{
		unsigned char* pRGB = rgbImageData + j * width * 3;
		unsigned char* pY = yuvImageData + j * width;
		unsigned char* pU = yuvImageData + frame_size + (j >> 1) * width;
		unsigned char* pV = pU + (frame_size >> 1);
		for (int i = 0; i < width; i++)
		{
			y = *(pY + i);
			u = *(pU + (i >> 1));
			v = *(pV + (i >> 1));

			*(pRGB) = CLIPVALUE(YUVToB(y, u, v), 0, 255);
			*(pRGB + 1) = CLIPVALUE(YUVToG(y, u, v), 0, 255);
			*(pRGB + 2) = CLIPVALUE(YUVToR(y, u, v), 0, 255);
			pRGB += 3;
		}
	}

	return 0;
}

你可能感兴趣的:(VS,C++,c++,c语言,算法)