|
我用ifstream读取一个5m的BMP文件,每次读取4个字节,但是在读到3712×4个字节的时候,就eof了,
每次都是在那里停掉。不知道什么原因。
求助
/////////////////////////////////////差值生成文件///////////////////////////////////////////
//生成一个bmp的差值图形文件,在这个文件中,所有有变化的点,都为白色:FF FF FF
//没有变化的点都是黑色:00 00 00
//再生成一个差值文件。即对于每一个点,使用S8模式,保留差值
//
///////////////////////////////////////////////////////////////////////////////////////////
void MakeDisFile(char * filepath, int filenum)//filenum:文件数量,文件名,对应为1。bmp~filenum。bmp
{
int headlength=54;
char BMPfilename0[100],BMPfilename1[100],Bisfilename[100],Disfilename[100];
char FileHeader[54];
unsigned char FF[]={255,255,255,255};
unsigned char OO[]={0,0,0,0};
int sizePixel;
int countpixel;
typedef unsigned char Pixel[4];
Pixel pixel0,pixel1,Dispixel;
for(int i=1;i<=filenum;i++)
{
sprintf(BMPfilename0,"%s\\%d.bmp",filepath,i);//当前file
sprintf(BMPfilename1,"%s\\%d.bmp",filepath,i);//next file
sprintf(Bisfilename,"%s\\Bis%d.bmp",filepath,i);//Bisfilename:差值图形文件
sprintf(Disfilename,"%s\\Dis%d.dat",filepath,i);//Disfilename:差值数值文件
ifstream ifr0(BMPfilename0);
ifstream ifr1(BMPfilename1);
ofstream ofrBMP(Bisfilename);
ofstream ofrDis(Disfilename);
ifr0.read(FileHeader,headlength);//read out the file header,and then write to the Bisfilename
ofrBMP.write(FileHeader,headlength);
ifr1.seekg(headlength);
countpixel=0;
sizePixel=FileHeader[28]/8;//bitperpixel /8=byteperpixel
while (!ifr1.bad())
{
countpixel++;
ifr0.read((char*)pixel0,sizePixel);
ifr1.read((char*)pixel1,sizePixel);
int dis=0;
for (int tem_i=0;tem_i<sizePixel;tem_i++)
{
Dispixel[tem_i]=pixel0[tem_i]-pixel1[tem_i];//for the distance
dis+=Dispixel[tem_i];//dis 累加整个dis值,当0:没有变化
}
//Dispixel差值写入文件Disfile
ofrDis.write((const char*)Dispixel,sizePixel);
//如果Dispixel是000,表明这个点没有变化,则写入Bisfile为00 00 00
//if the dispixel is not 000 then write 'FF FF FF'to Bisfile
if (dis)
{//只要有一个为非0,则表示有变化
ofrBMP.write((const char *)FF,sizePixel);
}
else//没有变化
{
ofrBMP.write((const char *)OO,sizePixel);
}
if (ifr0.eof())
{
int temp;
temp=countpixel;
}
}
ifr0.close();
ifr1.close();
ofrBMP.close();
ofrDis.close();
}
} |
|