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 に答える