我正在尝试读取.bmp图像并将数据写入文本文件。代码运行正常,但问题是,它无法读取整个图像,所以我必须多次调用fread()
函数。执行此操作时,我的代码会重复将第一个读取数据存储到文本文件中。为了正确读取整个图像,我需要做哪些更改?以下是我的代码段。
int size = width * height;
unsigned char* data = new unsigned char[size];
filename = "image.bmp";
fname = "image_data.txt";
FILE* f = fopen(filename, "rb");
FILE *fp = fopen(fname, "w");
while(totalBytes < size)
{
readsize = fread(data, sizeof(unsigned char), size, f);
totalBytes += readsize;
for(i = 0; i < readsize; i++)
{
fprintf(fp, "%d", data[i]);
if((i % width) == 0 && i != 0)
fprintf(fp, "\n");
}
fseek(f, readsize, SEEK_SET);
readsize = 0;
}
答案 0 :(得分:2)
您的fseek
电话错误。在fread
调用之后,文件位置将位于读取数据的后面,因此您可以在不寻求的情况下继续阅读。
之前发生的事情是你读了X个字节,对文件位置X做了一个不必要但无害fseek
,然后读取了Y个字节,但做了一个有害的fseek
回到文件位置X,所以你继续阅读相同的数据。
while(totalBytes < size)
{
readsize=fread(data, sizeof(unsigned char), size, f);
totalBytes+=readsize;
for(i = 0; i < readsize; i++)
{
fprintf(fp,"%d",data[i]);
if((i % width)== 0 && i!=0)
fprintf(fp,"\n");
}
}