📄 cpp2.cpp
字号:
#include<stdio.h>
main()
{
int i=0,j=0,white=255,i0,j0,w,h;
float fw,fh,i1,j1,t1,t2;
unsigned int a[256][256],value1,value2,value3;
FILE *cp;
printf("---------------------------高次插值缩放-------------------------------\n");
printf("请输入要求的高度和宽度:\n");
printf("height=");
scanf("%d",&h);
printf("\nwidth=");
scanf("%d",&w); //输入想要得到的新图形的宽度w和高度h
if((cp=fopen("lena.raw","rb"))==NULL)
printf("file can not be opened.");
else{
for(i=0;i<=255;i++){
for(j=0;j<=255;j++){
fread(&a[i][j],1,1,cp);
}
}
fclose(cp); //读取并存储原图像
}
fw=(float)w/256;
fh=(float)h/256;
if((cp=fopen("gaoci.raw","wb"))==NULL)
printf("can not open.");
else{
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
j1=(float)j/fw;
j0=(int)j1;
t1=j1-(float)j0;
i1=(float)i/fh;
i0=(int)i1;
t2=i1-(float)i0;
if((j0<0)||(j0>=256)||(i0<0)||(i0>=256))
{
fwrite(&white,1,1,cp);
}
else{
if(j0>=1&&j0<=254) //x方向进行高次插值得到x方向的值value2
value2=a[i0][j0-1]*t1*(t1-1)/2+a[i0][j0]*(t1+1)*(1-t1)+a[i0][j0+1]*(t1+1)*t1/2;
else
value2=a[i0][j0];
if(i0>=1&&i0<=254) //y方向进行高次插值得到y方向的值value3
value3=a[i0-1][j0]*t2*(t2-1)/2+a[i0][j0]*(t2+1)*(1-t2)+a[i0+1][j0]*(t2+1)*t2/2;
else
value3=a[i0][j0];
if(t1+t2!=0)
value1=value2*(t2/(t1+t2))+value3*(t1/(t1+t2));
else
value1=(value2+value3)/2;
fwrite(&value1,1,1,cp);
}
}
}
fclose(cp);
}
printf("\n文件已输出至gaoci.raw\n");
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -