1.RGB转素描
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int temp_ex(int **save,int *temp,int tw,int x,int y)
{
int i,j;
int m=0,px,py,t;
for(i=0;i<tw;i++)
for(j=0;j<tw;j++)
{
py=y-tw/2+i;
px=x-tw/2+j;
t=(save[px][py*3]+save[px][py*3+1]+save[px][py*3+2])/3;
m=m+t*temp[i*tw+j];
}
return m;
}
void sumiao(FILE *fp1,int **save)
{
FILE *fp2;
char outfile[20];
int i,j,a,a1,a2,a3;
int **save1,**save2;
save1=(int **)malloc(height*sizeof(int*));
for(i=0;i<height;i++)
save1[i]=(int *)malloc(width*3*sizeof(int)); //保存图像信息,便于操作
save2=(int **)malloc(height*sizeof(int*));
for(i=0;i<height;i++)
save2[i]=(int *)malloc(width*3*sizeof(int)); //保存图像信息,便于操作
int temp[9]={1,1,1,1,-8,1,1,1,1};
int temp1[9]={1,1,-1,1,0,-1,1,-1,-1};
int temp2[9]={1,1,1,-1,0,1,-1,-1,-1};
int temp3[9]={1,1,1,1,4,1,1,1,1};
printf("输入转换后的bmp文件的文件名:");
scanf("%s",outfile);
if((fp2=fopen(outfile,"wb+"))==NULL)
{
printf("cannot open outfile");
exit(0);
}
fseek(fp1,0L,0);
for(i=0;i<54;i++)
fputc(fgetc(fp1),fp2); //文件头部
for(i=0;i<height;i++)
{
for(j=0;j<width*3;j++)
{
save[i][j]=fgetc(fp1);
save1[i][j]=save[i][j];
save2[i][j]=save[i][j];
}
for(j=0;j<extra;j++)
fgetc(fp1);
}
for(i=1;i<height-1;i++)
for(j=1;j<width-1;j++)
{ //拉普拉斯卷积运算
a=temp_ex(save,temp,3,i,j);
a1=fabs(temp_ex(save,temp1,3,i,j)); //杂点检测
a2=fabs(temp_ex(save,temp2,3,i,j));
a3=fmax(a1,a2);
if(a3<25) a=0;
else
{
a=(int)(a*2);
if(a>255) a=255;
else if(a<32) a=0;
}
a=255-a; //反色处理
save1[i][j*3]=a;save1[i][j*3+1]=a;save1[i][j*3+2]=a;
}
for(i=1;i<height-1;i++) //模糊处理
for(j=1;j<width-1;j++)
{
a=temp_ex(save1,temp3,3,i,j)/12;
save2[i][j*3]=a;save2[i][j*3+1]=a;save2[i][j*3+2]=a;
}
fseek(fp2,54L,0);
for(i=0;i<height;i++)
{
for(j=0;j<width*3;j++)
fputc(save2[i][j],fp2);
for(j=0;j<extra;j++)
fputc(0,fp2);
}
for(i=0;i<height-1;i++)
{
free(save1[i]);
free(save2[i]);
}
fclose(fp2);
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int temp_ex(int **save,int *temp,int tw,int x,int y)
{
int i,j;
int m=0,px,py,t;
for(i=0;i<tw;i++)
for(j=0;j<tw;j++)
{
py=y-tw/2+i;
px=x-tw/2+j;
t=(save[px][py*3]+save[px][py*3+1]+save[px][py*3+2])/3;
m=m+t*temp[i*tw+j];
}
return m;
}
void sumiao(FILE *fp1,int **save)
{
FILE *fp2;
char outfile[20];
int i,j,a,a1,a2,a3;
int **save1,**save2;
save1=(int **)malloc(height*sizeof(int*));
for(i=0;i<height;i++)
save1[i]=(int *)malloc(width*3*sizeof(int)); //保存图像信息,便于操作
save2=(int **)malloc(height*sizeof(int*));
for(i=0;i<height;i++)
save2[i]=(int *)malloc(width*3*sizeof(int)); //保存图像信息,便于操作
int temp[9]={1,1,1,1,-8,1,1,1,1};
int temp1[9]={1,1,-1,1,0,-1,1,-1,-1};
int temp2[9]={1,1,1,-1,0,1,-1,-1,-1};
int temp3[9]={1,1,1,1,4,1,1,1,1};
printf("输入转换后的bmp文件的文件名:");
scanf("%s",outfile);
if((fp2=fopen(outfile,"wb+"))==NULL)
{
printf("cannot open outfile");
exit(0);
}
fseek(fp1,0L,0);
for(i=0;i<54;i++)
fputc(fgetc(fp1),fp2); //文件头部
for(i=0;i<height;i++)
{
for(j=0;j<width*3;j++)
{
save[i][j]=fgetc(fp1);
save1[i][j]=save[i][j];
save2[i][j]=save[i][j];
}
for(j=0;j<extra;j++)
fgetc(fp1);
}
for(i=1;i<height-1;i++)
for(j=1;j<width-1;j++)
{ //拉普拉斯卷积运算
a=temp_ex(save,temp,3,i,j);
a1=fabs(temp_ex(save,temp1,3,i,j)); //杂点检测
a2=fabs(temp_ex(save,temp2,3,i,j));
a3=fmax(a1,a2);
if(a3<25) a=0;
else
{
a=(int)(a*2);
if(a>255) a=255;
else if(a<32) a=0;
}
a=255-a; //反色处理
save1[i][j*3]=a;save1[i][j*3+1]=a;save1[i][j*3+2]=a;
}
for(i=1;i<height-1;i++) //模糊处理
for(j=1;j<width-1;j++)
{
a=temp_ex(save1,temp3,3,i,j)/12;
save2[i][j*3]=a;save2[i][j*3+1]=a;save2[i][j*3+2]=a;
}
fseek(fp2,54L,0);
for(i=0;i<height;i++)
{
for(j=0;j<width*3;j++)
fputc(save2[i][j],fp2);
for(j=0;j<extra;j++)
fputc(0,fp2);
}
for(i=0;i<height-1;i++)
{
free(save1[i]);
free(save2[i]);
}
fclose(fp2);
}