Rgb2Yuv算法实现

  
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++;
         }
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值