int clamp_s (int value,int m_min,int m_max)
{
int mm_ret = value;
if(value <m_min )
{
mm_ret = m_min ;
}
if(value > m_max)
{
mm_ret = m_min;
}
return mm_ret;
}
int DoubleInterplotion(unsigned char* srcImage, unsigned char * desImage, int srcW, int srcH, int destW, int destH, int channels)
{
float ratioW = 0.0f;
float ratioH = 0.0f;
int i = 0;
int j = 0;
int k = 0;
ratioW = srcW * 1.0f / destW;
ratioH = srcH * 1.0f / destH;
for ( i = 0; i < destH; i++)
{
for(j = 0; j < destW; j ++ )
{
int srcIdx = 0;
int srcIdy = 0;
float srcfIdx = 0.0f;
float srcfIdy = 0.0f;
float weightX[2] ={0.0f};
float weightY[2] ={0.0f};
srcfIdx = j * ratioW ;
srcfIdy = i * ratioH ;
srcIdx =(int)(srcfIdx);
srcIdy =(int)(srcfIdy);
weightX[1] = srcfIdx - srcIdx;
weightX[0] = 1.0f - weightX[1];
weightY[1] = srcfIdy - srcIdy;
weightY[0] = 1.0f - weightY[1];
for(k=0;k < channels ; k ++)
{
desImage[(i * destW + j ) * channels + k]=
(srcImage[(srcIdy * srcW + srcIdx ) * channels+ k] * weightX[0]+
srcImage[(srcIdy * srcW + clamp_s(srcIdx + 1, 0, srcW - 1)) *channels + k] * weightX[1]) * weightY[0] +
(srcImage[(clamp_s(srcIdy + 1, 0, srcH - 1) * srcW + srcIdx) * channels + k] * weightX[0] +
srcImage[(clamp_s(srcIdy + 1, 0, srcH - 1) * srcW + clamp_s(srcIdx + 1, 0, srcW - 1)) * channels + k] * weightX[1]) * weightY[1];
}
}
}
return 0;
}