#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <wingdi.h>
using namespace std;#define H 2032
#define W 614
void main()
{
int i,j,k;
char filename[50];
WORD* image1=new WORD[H*W];
WORD* image2=new WORD[H*W];
WORD* image3=new WORD[H*W];
BYTE* image4=new BYTE[H*W*3];BITMAPFILEHEADER* fileheader;
BITMAPINFOHEADER* infoheader;
unsigned int FHlen=sizeof(BITMAPFILEHEADER);
unsigned int IHlen=sizeof(BITMAPINFOHEADER);infoheader=new BITMAPINFOHEADER ;
memset(infoheader,0,IHlen);
infoheader->biSize =40;
infoheader->biWidth =W;
infoheader->biHeight =H;
infoheader->biPlanes =1;
infoheader->biBitCount =24;
infoheader->biCompression =BI_RGB;
infoheader->biSizeImage =H*W*3;fileheader=new BITMAPFILEHEADER;
memset(fileheader,0,FHlen);
fileheader->bfType =0x4D42;
fileheader->bfSize =FHlen+IHlen+H*W*3;
fileheader->bfOffBits=FHlen+IHlen;cout<<"请输入要打开的文件:"<<endl;
cin>>filename;
FILE *fp;
if((fp=fopen(filename,"rb"))==0)//输入要打开的文件
{
cout<<"Cannot open file,push any key!"<<endl;
getchar();
return;
}
fread(image1,sizeof(WORD),H*W,fp);
fclose(fp);cout<<"请输入要打开的文件:"<<endl;
cin>>filename;
FILE *fp1;
if((fp1=fopen(filename,"rb"))==0)//输入要打开的文件
{
cout<<"Cannot open file,push any key!"<<endl;
getchar();
return;
}
fread(image2,sizeof(WORD),H*W,fp1);
fclose(fp1);cout<<"请输入要打开的文件:"<<endl;
cin>>filename;
FILE *fp2;
if((fp2=fopen(filename,"rb"))==0)//输入要打开的文件
{
cout<<"Cannot open file,push any key!"<<endl;
getchar();
return;
}
fread(image3,sizeof(WORD),H*W,fp2);
fclose(fp2);for(i=0;i<H;i++)
for(j=0;j<W;j++)
for(k=0;k<3;k++)
{
switch(k)
{
case 0:image4[(i*W+j)*3+k]=((image1[(H-1-i)*W+j]/16)&8+((image1[(H-1-i)*W+j]%16)&7)*2);break;
case 1:image4[(i*W+j)*3+k]=((image2[(H-1-i)*W+j]/16)&8+((image1[(H-1-i)*W+j]%16)&7)*2);break;
case 2:image4[(i*W+j)*3+k]=((image3[(H-1-i)*W+j]/16)&8+((image1[(H-1-i)*W+j]%16)&7)*2);break;
}
}cout<<"********************************************************************************"<<endl;
FILE *fp3;
cout<<"请输入要保存的文件名:"<<endl;
cin>>filename;
if((fp3=fopen(filename,"wb"))==0)//输入要打开的文件
{
cout<<"Cannot open file"<<endl;//如果不可打开,报错
getchar();
return;
}
fwrite(fileheader,1,FHlen,fp3);
fwrite(infoheader,1,IHlen,fp3);
fwrite(image4,sizeof(BYTE),H*W*3,fp3);
fclose(fp3);
cout<<endl;
cout<<"********************************************************************************"<<endl;
cout<<"文件已保存,感谢使用!"<<endl;delete[] image1;
delete[] image2;
delete[] image3;
delete[] image4;
delete fileheader;
delete infoheader;
}