YUY2 转 rgb24


typedef       struct       tagTABLE_YUV2RGB  
{  
 unsigned       short       YtoR[256];  
 unsigned       short       YtoG[256];  
 unsigned       short       YtoB[256];    
 unsigned       short       UtoG[256];  
 unsigned       short       UtoB[256];  
 unsigned       short       VtoR[256];  
 unsigned       short       VtoG[256];    
}TABLE_YUV2RGB;   it

TABLE_YUV2RGB       table_yuv2rgb;   table

void Init()
{
 for (long  j  = 0; j < 256; ++j)  
 {    
  table_yuv2rgb.YtoR[j]       =       table_yuv2rgb.YtoG[j]  
   =  table_yuv2rgb.YtoB[j]  = (unsigned       short)(j << 7);  
  table_yuv2rgb.VtoR[j]       =       j       *       180;  
  table_yuv2rgb.VtoG[j]       =       j       *       91;  
  table_yuv2rgb.UtoG[j]       =       j       *       44;  
  table_yuv2rgb.UtoB[j]       =       j       *       226;  
 }  
}tab

void  ConvertYUY2toRGB24(BYTE* pDst, BYTE* pSrc, int w, int h)  
{  
   
 long       m       =       0;  
 long       k       =       0;  
 int   n=w/2;  
 int   dec=w*4;  
   
 int       tmpR0       =       0;  
 int       tmpG0       =       0;  
 int       tmpB0       =       0;  
 int       tmpR1       =       0;  
 int       tmpG1       =       0;  
 int       tmpB1       =       0;  
 k=(h-1)*w<<1;  
 for(   int   i=h-1;i>-1;i--)  
 {  
  
  for(int   j=0;j<n;j++)  
  {  
   tmpR0       =       (table_yuv2rgb.YtoR[pSrc[k       +       0]]       +       table_yuv2rgb.VtoR[pSrc[k       +       3]]       -       22906)       >>       7;    
   tmpG0       =       (table_yuv2rgb.YtoG[pSrc[k       +       0]]       -       table_yuv2rgb.VtoG[pSrc[k       +       3]]       -       table_yuv2rgb.UtoG[pSrc[k       +       1]]       +       17264)       >>       7;        
   tmpB0       =       (table_yuv2rgb.YtoB[pSrc[k       +       0]]       +       table_yuv2rgb.UtoB[pSrc[k       +       1]]       -       28928)       >>       7;  
   
   tmpR1       =       (table_yuv2rgb.YtoR[pSrc[k       +       2]]       +       table_yuv2rgb.VtoR[pSrc[k       +       3]]       -       22906)       >>       7;    
   tmpG1       =       (table_yuv2rgb.YtoG[pSrc[k       +       2]]       -       table_yuv2rgb.VtoG[pSrc[k       +       3]]       -       table_yuv2rgb.UtoG[pSrc[k       +       1]]       +       17264)       >>       7;    
   tmpB1       =       (table_yuv2rgb.YtoB[pSrc[k       +       2]]       +       table_yuv2rgb.UtoB[pSrc[k       +       1]]       -       28928)       >>       7;    
   
   if       (tmpR0       >       255)       tmpR0       =       255;  
   if       (tmpG0       >       255)       tmpG0       =       255;  
   if       (tmpB0       >       255)       tmpB0       =       255;  
   if       (tmpR1       >       255)       tmpR1       =       255;  
   if       (tmpG1       >       255)       tmpG1       =       255;  
   if       (tmpB1       >       255)       tmpB1       =       255;  
   
   if       (tmpR0       <       0)       tmpR0       =       0;  
   if       (tmpG0       <       0)       tmpG0       =       0;  
   if       (tmpB0       <       0)       tmpB0       =       0;  
   if       (tmpR1       <       0)       tmpR1       =       0;  
   if       (tmpG1       <       0)       tmpG1       =       0;  
   if       (tmpB1       <       0)       tmpB1       =       0;  
   
   pDst[m       +       0]       =     tmpB0;  
   pDst[m       +       1]       =       tmpG0;  
   pDst[m       +       2]       =       tmpR0;  
   pDst[m       +       3]       =       tmpB1;  
   pDst[m       +       4]       =       tmpG1;  
   pDst[m       +       5]       =       tmpR1;  
   
   k       +=       4;  
   m       +=       6;  
  }  
  k=k-dec;  
 }
}void