织梦CMS - 轻松建站从此开始!

罗索

RGB颜色空间转换为YUV颜色空间

落鹤生 发布于 2010-04-23 22:06 点击:次 
RGB2YUV(BYTE * rgb, BYTE * yuv);
TAG:

RGB2YUV(BYTE * rgb, BYTE * yuv)
{
    unsigned char R, G, B, *y, *u, *v;
    double RR, GG, BB;

    y = yuv;
    u = y + m_nHeight * m_nWidth;
    v = y + m_nHeight * m_nWidth * 3 / 2;

    // convert: the m_pBits is stored in BOTTOMUP
    // so read data from back to forward,
    // from down to up
    for (int r = 0; r < m_nHeight; ++r)
    {
        unsigned char * p = (BYTE*)m_pBits + (r * m_nPitch);
       
        for (int c = 0; c < m_nWidth; ++c)
        {
            int q = c * 3;
           
            B = *(p + q);
            G = *(p + q + 1);
            R = *(p + q + 2);

            //normalize to 16 ..235//
            RR = 219. * R / 255. + 16.;
            GG = 219. * G / 255. + 16.;
            BB = 219. * B / 255. + 16.;

            *y = (BYTE)(0.2991 * RR + 0.5849 * GG + 0.1159 * BB + .5);
            *u = (BYTE)(-0.1725 * RR - 0.3372 * GG + 0.5097 * BB + 128.5);
            *v = (BYTE)(0.5097 * RR - 0.4254 * GG - 0.0843 * BB + 128.5);
           
            y++;

            c & 1 ? v++:u++;
        }
    }
}

(night_elf)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9240.html]
本文出处:百度博客 作者:night_elf
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容