FiResize2用双线性插值
FiResize1用邻域法
FiResize1速度快点,FiResize2效果好点。两个函数都只进行了简单的浮点优化。如果对速度要求比较高的话可以继续进行mmx和sse优化。有可能考虑不齐会产生内存越界,我这边只进行简单的测试,没出现bug。channels是通道数,RGB彩色图channels为3,单通道黑白图没有测试过。
void FiResize2(BYTE *src, BYTE* dst, int srcWidth,int srcHeight,int dstWidth, int dstHeight,int channels)
{
int step1 = srcWidth*channels;
int step2 =dstWidth*channels;
float kx,ky;
long xrIntFloat_16=((srcWidth)<<16)/dstWidth+1;
long yrIntFloat_16=((srcHeight)<<16)/dstHeight+1;
const long csDErrorX=-(1<<15)+(xrIntFloat_16>>1);
const long csDErrorY=-(1<<15)+(yrIntFloat_16>>1);
long srcy_16=csDErrorY;
for (int j = 0; j < dstHeight; j++)
{
long kq=srcy_16>>16;
kq =kq>=0?kq:0;
long kq1 = kq<srcHeight-1?kq+1:kq;