inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
{
//B = 1.164(Y - 16) + 2.018(U - 128)
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
//R = 1.164(Y - 16) + 1.596(V - 128)
BYTE *orgRGBbuff = RGBbuff;
for(DWORD count=0;count<dwSize;count+=4)
{
//Y0 U0 Y1 V0
float Y0 = *YUY2buff;
float U = *(++YUY2buff);
float Y1 = *(++YUY2buff);
float V = *(++YUY2buff);
++YUY2buff;
*(RGBbuff) = (BYTE)(Y0 + (1.370705 * (V-128)));
*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));
*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));
*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));
*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));
*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));
++RGBbuff;
}
}
inline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
{
//R = Y + 1.14V
//G = Y - 0.39U - 0.58V
//B = Y + 2.03U
// R = Y + 1.403V'
//G = Y - 0.344U' - 0.714V'
//B = Y + 1.770U'
BYTE *orgRGBbuff = RGBbuff;
for(DWORD count=0;count<dwSize;count+=4)
{
//Y0 U0 Y1 V0
float Y0 = *YUY2buff;
float U = *(++YUY2buff);
float Y1 = *(++YUY2buff);
float V = *(++YUY2buff);
++YUY2buff;
float R,G,B;
R = (Y0 + 1.14f*V);
G=(Y0 - 0.39f*U-0.58f*V);
B=(Y0 +2.03f*U);
if(R<0) R =0;
if(R>255) R=255;
if(G<0) G =0;
if(G>255) G=255;
if(B<0) B =0;
if(B>255) B=255;
*(RGBbuff) = (BYTE)B;
*(++RGBbuff) = (BYTE)G;
*(++RGBbuff) = (BYTE)R;
R = (Y1 + 1.14f*V);
G=(Y1 - 0.39f*U-0.58f*V);
B=(Y1 +2.03f*U) ;
if(R<0) R =0;
if(R>255) R=255;
if(G<0) G =0;
if(G>255) G=255;
if(B<0) B =0;
if(B>255) B=255;
*(++RGBbuff) = (BYTE)B;
*(++RGBbuff) = (BYTE)G;
*(++RGBbuff) = (BYTE)R;
++RGBbuff;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130910.html
上一篇:如何設定RichView輸入法
