YV12轉RGB24

BOOL YV12RGB24(BYTE *yuv, BYTE *rgb)
{
	if (!yuv || !rgb)
        return FALSE;
 
    BYTE* yData = yuv;
    BYTE* vData = yuv + frameWidth*frameHeight*5/4;
    BYTE* uData = yuv + frameWidth*frameHeight;
    if (!uData || !vData)
		return FALSE;

    for (int iRow = 0; iRow < frameHeight; iRow++)
    {
        for (int jCol = 0; jCol < frameWidth; jCol++)
        {
            int Y = yData[iRow*frameWidth + jCol];
            int U = uData[(iRow / 2)*(frameWidth / 2) + (jCol / 2)];
            int V = vData[(iRow / 2)*(frameWidth / 2) + (jCol / 2)];
            int R = Y + (U - 128) + (((U - 128) * 103) >> 8);
            int G = Y - (((V - 128) * 88) >> 8) - (((U - 128) * 183) >> 8);
            int B = Y + (V - 128) + (((V - 128) * 198) >> 8);
 
            // r分量值 
            R = R<0 ? 0 : R;
			rgb[3 * (iRow*frameWidth + jCol) + 2] = R > 255 ? 255 : R;
            // g分量值
            G = G<0 ? 0 : G;
			rgb[3 * (iRow*frameWidth + jCol) + 1] = G>255 ? 255 : G;
            // b分量值 
            B = B<0 ? 0 : B;
			rgb[3 * (iRow*frameWidth + jCol) + 0] = B>255 ? 255 : B;
        }
    }
    return TRUE;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章