#include <iostream>
using namespace std;
#include <fstream>
using namespace std;
#include <string>
using namespace std;
void picconvert(ifstream *PIn,ofstream *POut){
//声明变量————————————————————————————————————
//输入文件当文件长度,文件长度2,当前处理字节:
unsigned short int Byte=0,Byte2=0,NowByte=0;
//输入数据,输出数据,位操作运算数据1,2,当前字节运算位1,2:
char InData=0,OutData1=0,OutData2=0,OprData1=1,OprData2=3,Digit=0,
//图片宽,高:
GWidth=0,GHeight=0,
//透明标志:
TransFlag=0,
//图片数量,当前处理图片,单行图片像素:
Num=0,NowPic=0,Pix=0;
//————————————————————————————————————————
//文件头处理———————————————————————————————————
//读取序号:
PIn->read(&OutData1,1);
PIn->read(&OutData2,1);
//读取头信息:
PIn->read(&GWidth,1);
PIn->read(&GHeight,1);
PIn->read(&Num,1);
PIn->read(&TransFlag,1);
TransFlag=TransFlag+2;
//计算图片大小:
switch(TransFlag){
case 3:
Byte=GWidth/4;
if(GWidth%4){Byte=Byte+1;}
Byte=Byte*GHeight*Num+6;
break;
case 4:
Byte=GWidth/4;
if(GWidth%4){Byte=Byte+1;}
Byte=(Byte*2*GHeight*Num)+6;
break;
}
//写入图片大小:
InData=Byte;
POut->write(&InData,1);
InData=Byte>>8;
POut->write(&InData,1);
//写入图片序号:
POut->write(&OutData1,1);
POut->write(&OutData2,1);
//变量清0:
OutData1=0;
OutData2=0;
//写入头信息:
POut->write(&GWidth,1);
POut->write(&GHeight,1);
POut->write(&Num,1);
POut->write(&TransFlag,1);
cout<<(POout->tellp());
//————————————————————————————————————————
}
int main(){
int Byte;
//输入文件:
ifstream InFile;
//输出文件:
ofstream OutFile;
char InName[20],OutName[20]="O";
//获取文件名,打开输入输出文件,定位流指针:
//————————————————————————————————————————
cout<<"请输入文件名:\n";
cin>>InName;
strcat(OutName,InName);
InFile.open(InName,ios::in);
OutFile.open(OutName,ios::out | ios::trunc | ios::binary);
//————————————————————————————————————————
//调用转换函数:
picconvert(&InFile,&OutFile);
cin>>Byte;
//保存文件:
InFile.close();
OutFile.close();
return 0;
}
using namespace std;
#include <fstream>
using namespace std;
#include <string>
using namespace std;
void picconvert(ifstream *PIn,ofstream *POut){
//声明变量————————————————————————————————————
//输入文件当文件长度,文件长度2,当前处理字节:
unsigned short int Byte=0,Byte2=0,NowByte=0;
//输入数据,输出数据,位操作运算数据1,2,当前字节运算位1,2:
char InData=0,OutData1=0,OutData2=0,OprData1=1,OprData2=3,Digit=0,
//图片宽,高:
GWidth=0,GHeight=0,
//透明标志:
TransFlag=0,
//图片数量,当前处理图片,单行图片像素:
Num=0,NowPic=0,Pix=0;
//————————————————————————————————————————
//文件头处理———————————————————————————————————
//读取序号:
PIn->read(&OutData1,1);
PIn->read(&OutData2,1);
//读取头信息:
PIn->read(&GWidth,1);
PIn->read(&GHeight,1);
PIn->read(&Num,1);
PIn->read(&TransFlag,1);
TransFlag=TransFlag+2;
//计算图片大小:
switch(TransFlag){
case 3:
Byte=GWidth/4;
if(GWidth%4){Byte=Byte+1;}
Byte=Byte*GHeight*Num+6;
break;
case 4:
Byte=GWidth/4;
if(GWidth%4){Byte=Byte+1;}
Byte=(Byte*2*GHeight*Num)+6;
break;
}
//写入图片大小:
InData=Byte;
POut->write(&InData,1);
InData=Byte>>8;
POut->write(&InData,1);
//写入图片序号:
POut->write(&OutData1,1);
POut->write(&OutData2,1);
//变量清0:
OutData1=0;
OutData2=0;
//写入头信息:
POut->write(&GWidth,1);
POut->write(&GHeight,1);
POut->write(&Num,1);
POut->write(&TransFlag,1);
cout<<(POout->tellp());
//————————————————————————————————————————
}
int main(){
int Byte;
//输入文件:
ifstream InFile;
//输出文件:
ofstream OutFile;
char InName[20],OutName[20]="O";
//获取文件名,打开输入输出文件,定位流指针:
//————————————————————————————————————————
cout<<"请输入文件名:\n";
cin>>InName;
strcat(OutName,InName);
InFile.open(InName,ios::in);
OutFile.open(OutName,ios::out | ios::trunc | ios::binary);
//————————————————————————————————————————
//调用转换函数:
picconvert(&InFile,&OutFile);
cin>>Byte;
//保存文件:
InFile.close();
OutFile.close();
return 0;
}