/*************************************************************************
扭曲效果
************************************************************************/
void twist(CString c)
{double m;
double n=3;
int r=w/2;;
int w=Imgin->width;
int h=Imgin->height;
m=(double)2/r;
int tx=w/2;
int ty=h/2;
for(i=0;i<2*r;i++)//列
{
for(j=0;j<2*r;j++)
{
radius=sqrt((double)(j-r)*(double)(j-r)+(double)(i-r)*(double)(i-r));
if(radius<=r)//区域像素点
{
beta=pi/n*(1-m*fabs(radius-(double)r/2));
x=j-r+tx;
y=i-r+ty;//输出图像的像素点坐标
t1=(double)((j-r)*cos(beta)-(i-r)*sin(beta)+tx);
t2=(double)((j-r)*sin(beta)+(i-r)*cos(beta)+ty);
xx=(int)t1;
yy=(int)t2;//对应的源图像坐标取整
temp1=(double)(t1-xx);
temp2=(double)(t2-yy);
if(c=="最近邻插值")
{
nearest( xx, yy, x, y,temp1,temp2);//最近邻插值
}
else if(c=="双线性插值")
{
Bilinear( xx, yy, x, y,temp1,temp2);//双线性插值
}
else if(c=="双三次插值")
{
sanci( xx, yy, x, y,temp1,temp2);//双三次插值
}
}
}
}
}
}
扭曲效果
************************************************************************/
void twist(CString c)
{double m;
double n=3;
int r=w/2;;
int w=Imgin->width;
int h=Imgin->height;
m=(double)2/r;
int tx=w/2;
int ty=h/2;
for(i=0;i<2*r;i++)//列
{
for(j=0;j<2*r;j++)
{
radius=sqrt((double)(j-r)*(double)(j-r)+(double)(i-r)*(double)(i-r));
if(radius<=r)//区域像素点
{
beta=pi/n*(1-m*fabs(radius-(double)r/2));
x=j-r+tx;
y=i-r+ty;//输出图像的像素点坐标
t1=(double)((j-r)*cos(beta)-(i-r)*sin(beta)+tx);
t2=(double)((j-r)*sin(beta)+(i-r)*cos(beta)+ty);
xx=(int)t1;
yy=(int)t2;//对应的源图像坐标取整
temp1=(double)(t1-xx);
temp2=(double)(t2-yy);
if(c=="最近邻插值")
{
nearest( xx, yy, x, y,temp1,temp2);//最近邻插值
}
else if(c=="双线性插值")
{
Bilinear( xx, yy, x, y,temp1,temp2);//双线性插值
}
else if(c=="双三次插值")
{
sanci( xx, yy, x, y,temp1,temp2);//双三次插值
}
}
}
}
}
}