冰河の泥鱼的专栏

非学无以成才,非志无以成学.

原创 Rgb2Yuv算法实现收藏

新一篇: BMP文件结构[网摘] | 旧一篇: 视频数据格式每帧的大小尺寸

  
void Rgb2Yuv(unsigned srcWidth,unsigned srcHeight,const BYTE* rgb,BYTE* yuv);
#define rgbtoy(b, g, r, y) y=(BYTE)(((int)30*r +(int)59*g +(int)11*b)/100)
#define rgbtoyuv(b, g, r, y, u, v) \
rgbtoy(b, g, r, y); \
u=(BYTE)(((int)-17*r -(int)33*g +(int)50*b+12800)/100); \
v=(BYTE)(((int)50*r -(int)42*g -(int)8*b+12800)/100)
 
void Rgb2Yuv ( unsigned srcWidth,unsigned srcHeight,const BYTE * rgb,BYTE * yuv )
{
     const unsigned planeSize = srcWidth*srcHeight;
     const unsigned halfWidth = srcWidth >> 1;
    
     BYTE * yplane  = yuv;
     BYTE * uplane = yuv + planeSize;
     BYTE * vplane = yuv + planeSize + (planeSize >> 2);
     const BYTE * rgbIndex = rgb;
    
     for (unsigned y = 0; y < srcHeight; y++)
     {
         BYTE * yline = yplane + (y * srcWidth);
         BYTE * uline = uplane + ((y >> 1) * halfWidth);
         BYTE * vline = vplane + ((y >> 1) * halfWidth);
          rgbIndex = rgb + (srcWidth*(srcHeight-1-y)*3);
    
         for (unsigned x = 0; x < srcWidth; x+=2)
         {
              rgbtoy(rgbIndex[0], rgbIndex[1], rgbIndex[2],*yline);
             
              rgbIndex += 3;
              yline++;
             
              rgbtoyuv(rgbIndex[0], rgbIndex[1],
              rgbIndex[2],*yline, *uline, *vline);
             
              rgbIndex += 3;
              yline++;
              uline++;
              vline++;
         }
     }
}

发表于 @ 2007年07月20日 12:24:00|评论(loading...)|编辑

新一篇: BMP文件结构[网摘] | 旧一篇: 视频数据格式每帧的大小尺寸

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 冰河の泥鱼