Published using Google Docs
YUY2 轉 RGB
Updated automatically every 5 minutes

//YUY2 轉成 RGB 的 function

void YUY2ToRGB()

{

k = 0;

int y1=0,y2=0,u=0,v=0;

for (i=0;i<iCapWindowHeight;i++)

{

for (j=0;j<iCapWindowWidth;j++)

{

y1=ptrCapture[k];

u=ptrCapture[k+1]-128;

y2=ptrCapture[k+2];

v=ptrCapture[k+3]-128;

k = k+4;

//第一個 RGB

if((y1+2.03211*u)<0) ptrRGBCapture[i][j][2]=0;

else ptrRGBCapture[i][j][2] = (y1+2.03211*u)>=255?255:(y1+2.03211*u); //B

if((y1-0.39465*u-0.58060*v)<0) ptrRGBCapture[i][j][1]=0;

else ptrRGBCapture[i][j][1] = (y1-0.39465*u-0.58060*v)>=255?255:(y1-0.39465*u-0.58060*v); //G

if((y1+1.13983*v)<0) ptrRGBCapture[i][j][0]=0;

else ptrRGBCapture[i][j][0] = (y1+1.13983*v)>=255?255:(y1+1.13983*v); //R

j++;

//第二個 RGB

if((y2+2.03211*u)<0) ptrRGBCapture[i][j][2]=0;

else ptrRGBCapture[i][j][2] = (y2+2.03211*u)>=255?255:(y2+2.03211*u); //B

if((y2-0.39465*u-0.58060*v)<0) ptrRGBCapture[i][j][1]=0;

else ptrRGBCapture[i][j][1] = (y2-0.39465*u-0.58060*v)>=255?255:(y2-0.39465*u-0.58060*v); //G

if((y2+1.13983*v)<0) ptrRGBCapture[i][j][0]=0;

else ptrRGBCapture[i][j][0] = (y2+1.13983*v)>=255?255:(y2+1.13983*v); //R

}

}

}

//----------------------------------------------------------------------------------------------------------------------

//使用前先宣告 , 呼叫完 YUY2ToRGB() 後 , 會把轉換完的RGB資料存在 ptrRGBCapture

BYTE ptrRGBCapture[iCapWindowHeight][iCapWindowWidth][3];

/----------------------------------------------------------------------------------------------------------------------

//使用

CaptureData = LPVIDEOHDR(lpvhdr);

ptrCapture = CaptureData->lpData;        //ptrCapture 是擷取視窗的 YUY2 資料

YUY2ToRGB(); //透過 YUY2ToRGB(); 會把 ptrCapture 的 YUY2 資料轉換成 RGB 並存在 ptrRGBCapture 

//ptrRGBCapture[i][j][0] 為 R

//ptrRGBCapture[i][j][1] 為 G

//ptrRGBCapture[i][j][2] 為 B

/----------------------------------------------------------------------------------------------------------------------