关于JPEG编码的程序,请大虾帮忙~~!!

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:43:12
下面是关于JPEG中色度表的程序:
void CompressEncode::InitColorTable( void )
{
int i;
int nScale = 1L << 16;
int CBCR_OFFSET = 128<<16;

int nHalf = nScale >> 1;

for( i=0; i<256; i++ )
{
m_RToY[ i ] = (int)( 0.29900 * nScale + 0.5 ) * i;
m_GToY[ i ] = (int)( 0.58700 * nScale + 0.5 ) * i;
m_BToY[ i ] = (int)( 0.11400 * nScale + 0.5 ) * i + nHalf;

m_RToCb[ i ] = (int)( 0.16874 * nScale + 0.5 ) * (-i);
m_GToCb[ i ] = (int)( 0.33126 * nScale + 0.5 ) * (-i);
m_BToCb[ i ] = (int)( 0.50000 * nScale + 0.5 ) * i +
CBCR_OFFSET + nHalf - 1;

m_RToCr[ i ] = m_BToCb[ i ];
m_GToCr[ i ] = (int)( 0.41869 * nScale + 0.5 ) * (-i);
m_BToCr[ i ] = (int)( 0.08131 * nScale + 0.5 ) * (-i);
}
}

其中int nScale = 1L << 16;是什么意思啊?
望高手指教~~

这个函数是初始化颜色到模拟色差分量的转换表。
其中 nScale = 1L << 16;,从数学意义是使nScale成为0x0100H,从下面对数组m_RToY、m_RToCb等的设置,可以知道这些数组是RGB颜色到亮度及色差转换时的比例值,nScale只是初始化时用到的一个常用值。

因为这些数组是RGB到YCbCr的转换,其值的意义与RGB的色深(颜色的位数)有关。

以上只是我对该段代码的理解,没仔细研究过JPEG的压缩算法。

增强16位色