用fread()读取.bmp图像

时间:2012-12-16 15:31:50

标签: c fread

我正在尝试读取.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;
}

1 个答案:

答案 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");
        }
}