📄 display.h
字号:
#define MaxMig 20
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
#include "dos.h"
struct FileHeader
{
int bfSize;
short bfReserved1;
short bfReserved2;
int bfOffBytes;
};
struct BitmapHeader
{
int biSize;
int biWidth;
int biHeight;
short biPlanes;
short biBitCount;
int bicompression;
int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
int biClrUsed;
int biClrColors;
};
struct ColorMap
{
unsigned char bmiRed;
unsigned char bmiGreen;
unsigned char bmiBlue;
unsigned char bmiReserved;
};
void display(char *infile,char *outfile,int m,int n,int l)
/**************************
input:
infile : 输入文件名
m : 输入文件行点数
n : 输入文件行数
l : 输出文件行数,一般等于n
output:
outfile: 输出bmp文件名
调用实例:
display("image.dat","image.bmp",2048,1024,1024);
**************************/
{
FILE *fp1,*fp2;
int i=0,j=0,k=0;
//int Azimuth_length=4096,Range_length=8192;//方位向和距离向点数
int Azimuth_length,Range_length,Xsize,Ysize;//方位向和距离向点数
float amax;
int imax,jmax;
float a;
float sum,max=0;
int num;
float a1,a2,aL,d,d1;
//int R_coordinate_min=0, R_coordinate_max=6144; //距离向截取的数据起点和终点坐标值
int R_coordinate_min=0, R_coordinate_max; //距离向截取的数据起点和终点坐标值
int R_coordinate_margin;//截取数据所跨越的宽度
int A_compress_num=1; //压缩率
int A_compress_num0; //方位向数据和压缩率的比值
unsigned char **image;
float *temp;
//char infile[50],outfile[50];
struct FileHeader FileHead;
struct BitmapHeader BMPHead;
struct ColorMap ClrMap[256];
//printf("Enter the infile name:\n");
//scanf("%s",infile);
if((fp1=fopen(infile,"rb"))==NULL)
{
printf("cannot open infile!\n");
exit(1);
}
Xsize=m;
Ysize=n;
/*printf("方位向点数=? 距离向点数=?\n");
scanf("%d %d",&Azimuth_length,&Range_length);
printf("\n距离向截取点数=?\n");
scanf("%d",&R_coordinate_max);
*/
Azimuth_length=m;
Range_length=n;
R_coordinate_max=l;
R_coordinate_margin=R_coordinate_max-R_coordinate_min;
A_compress_num0=Azimuth_length/A_compress_num;
temp=(float *)calloc(A_compress_num0,sizeof(float));
amax=0;
imax=0;
jmax=0;
sum=0;
for(i=0;i<R_coordinate_margin;i++)
{
fread(temp,sizeof(float),A_compress_num0,fp1);
for(j=0;j<A_compress_num0;j++)
{
a=temp[j];
if(max<a) max=a; //峰值
sum+=a;
if(a>=amax)
{
amax=a;
imax=i;
jmax=j;
}
}
}
fclose(fp1);
printf("\n图像最大值=%e\n",amax);
sum=sum/(R_coordinate_margin*A_compress_num0); //均值
image=(unsigned char **)calloc(R_coordinate_margin,sizeof(unsigned char*));
for(i=0;i<R_coordinate_margin;i++)
image[i]=(unsigned char *)calloc(A_compress_num0,sizeof(unsigned char));
if((fp1=fopen(infile,"rb"))==NULL)
{
printf("cannot open infile\n");
exit(1);
}
d=0.0;
for(i=0;i<R_coordinate_margin;i++)
{
fread(temp,sizeof(float),A_compress_num0,fp1);
for(j=0;j<A_compress_num0;j++)
{
a=temp[j];
a=a-sum;
d+=a*a;
}
}
fclose(fp1);
d=d/(R_coordinate_margin*A_compress_num0); //方差
d=(float)(sqrt(d)); //均方根
d1=(float)(sum-2.0*d);
if((fp1=fopen(infile,"rb"))==NULL)
{
printf("cannot open infile\n");
exit(1);
}
/*printf("Enter the outfile name:\n");
scanf("%s",outfile);*/
if((fp2=fopen(outfile,"wb"))==NULL)
{
printf("cannot open outfile.dat\n");
exit(1);
}
// Define the File Header
FileHead.bfSize=Xsize*Ysize+1024+54;
FileHead.bfReserved1=0;
FileHead.bfReserved2=0;
FileHead.bfOffBytes=1024+54;
// Define the Bitmap Header
BMPHead.biSize=40;
BMPHead.biWidth=Xsize;
BMPHead.biHeight=Ysize;
BMPHead.biPlanes=1;
BMPHead.biBitCount=8;
BMPHead.bicompression=0;
BMPHead.biSizeImage=Xsize*Ysize;
BMPHead.biXPelsPerMeter=0;
BMPHead.biYPelsPerMeter=0;
BMPHead.biClrUsed=0;
BMPHead.biClrColors=0;
// Define the Color Map
for (i=0;i<256;i++)
{
ClrMap[i].bmiRed=i;
ClrMap[i].bmiGreen=i;
ClrMap[i].bmiBlue=i;
ClrMap[i].bmiReserved=0;
}
fprintf(fp2,"%c",'B');
fprintf(fp2,"%c",'M');
fwrite(&FileHead,sizeof(struct FileHeader),1,fp2);
fwrite(&BMPHead,sizeof(struct BitmapHeader),1,fp2);
fwrite(&ClrMap,sizeof(struct ColorMap),256,fp2);
if(d1<=0.0)
//if(1)
{
for(i=0;i<R_coordinate_margin;i++)
{
fread(temp,sizeof(float),A_compress_num0,fp1);
// aL=sum+2*d;
aL=max/2; //衰减10
for(j=0;j<A_compress_num0;j++)
{
a=temp[j];
if(a<=aL)
{
if(a<=max/100000) num=0; //衰减30分贝
else
num=(int)(sqrt(a/aL)*255.0);
}
else
num=255;
image[i][j]=num;
}
//fwrite(image,sizeof(unsigned char),A_compress_num0,fp2);
}
}
else
{
for(i=0;i<R_coordinate_margin;i++)
{
fread(temp,sizeof(float),A_compress_num0,fp1);
aL=(float)(4.0*d);
a1=(float)(sum-2.0*d);
a2=(float)(sum+2.0*d);
for(j=0;j<A_compress_num0;j++)
{
a=temp[j];
if(a<=a1)
num=0;
else if(a>=a2)
num=255;
else
num=(int)(sqrt((a-a1)/aL)*255.0);
image[i][j]=num;
}
//fwrite(image,sizeof(unsigned char),A_compress_num0,fp2);
}
}
for(i=0;i<R_coordinate_margin;i++)
//for(i=R_coordinate_margin-1;i>-1;i--)
fwrite(image[i],sizeof(unsigned char),A_compress_num0,fp2);
fclose(fp1);
fclose(fp2);
for(i=0;i<R_coordinate_margin;i++)
free(image[i]);
printf("\n%s位图文件生成完毕!\n",outfile);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -