1

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

1 回答 1

2

你的fseek电话是错误的。调用后fread文件位置将在读取数据的后面,因此您可以继续读取而无需查找。

之前发生的情况是,您读取了 X 字节,fseek对文件位置 X 做了不必要但无害的操作,然后读取了 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");
        }
}
于 2012-12-16T15:36:21.863 回答