分享

rgb

 to默认row 2012-05-24

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++;
        }
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多