双线插值算法,求指导
双线插值算法就是根据四个像素点,加权平均,求出一个点的像素。我在网上下载了一个程序,但是看的不是很明白。求高手指导……
double rateH = ( double ) srcH / desH; //高度的放大比例
double rateW = ( double ) srcW / desW; //宽度的放大比例
//假如是把300万像素放大成500万像素,那么rateH=rateW=3/5
int desBufSize = ( ( desW * bitCount + 31 ) / 32 ) * 4 * desH; //????
int desLineSize = ( ( desW * bitCount + 31 ) / 32 ) * 4; //????
BYTE *desBuf = new BYTE[ desBufSize ];
double rateH = ( double ) srcH / desH;
double rateW = ( double ) srcW / desW
//双线型内插值算法
for ( i = 0; i < desH; i++ )
{
int tH = ( int ) ( rateH * i ); //比例乘以坐标,这是什么?
int tH1 = min( tH + 1, srcH - 1 );
float u = ( float ) ( rateH * i - tH );
for ( j = 0; j < desW; j++ )
{
int tW = ( int ) ( rateW * j );
int tW1 = min( tW + 1, srcW - 1 );
float v = ( float ) ( rateW * j - tW );
//f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)
for ( int k = 0; k < 3; k++ )
{
desBuf[ i * desLineSize + j * bitCount / 8 + k ] =
( 1 - u ) * ( 1 - v ) * srcBuf[ tH * lineSize + tW * bitCount / 8 + k ] +
( 1 - u ) * v * srcBuf[ tH1 * lineSize + tW * bitCount / 8 + k ] +
u * ( 1 - v ) * srcBuf[ tH * lineSize + tW1 * bitCount / 8 + k ] +
u * v * srcBuf[ tH1 * lineSize + tW1 * bitCount / 8 + k ];
}
}
}
求指导,
[解决办法]
http://zh.wikipedia.org/zh/%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC