2

C を使用して bmp ファイルからバイトを読み取るにはどうすればよいですか?

4

5 に答える 5

5

以下は、バイナリ ファイルをロードし、最初のバイトへのポインタを返すための汎用スケルトンです。これは、「fopen() に続いて fread()」に要約されますが、... もう少し冗長です。エラーはチェックされますが、エラー処理はありません。このコードは正しいと思います。このコードは、空のファイルを拒否します (定義上、ロードするデータが含まれていません)。

#include <stdio.h>
#include <stdlib.h>

static int file_size(FILE *in, size_t *size)
{
  if(fseek(in, 0, SEEK_END) == 0)
  {
    long len = ftell(in);
    if(len > 0)
    {
      if(fseek(in, 0, SEEK_SET) == 0)
      {
        *size = (size_t) len;
        return 1;
      }
    }
  }
  return 0;
}

static void * load_binary(const char *filename, size_t *size)
{
  FILE *in;
  void *data = NULL;
  size_t len;

  if((in = fopen(filename, "rb")) != NULL)
  {
    if(file_size(in, &len))
    {
      if((data = malloc(len)) != NULL)
      {
        if(fread(data, 1, len, in) == len)
          *size = len;
        else
        {
          free(data);
          data = NULL;
        }
      }
    }
    fclose(in);
  }
  return data;
}

int main(int argc, char *argv[])
{
  int i;

  for(i = 1; argv[i] != NULL; i++)
  {
    void *image;
    size_t size;

    if((image = load_binary(argv[i], &size)) != NULL)
    {
      printf("Loaded BMP from '%s', size is %u bytes\n", argv[i], (unsigned int) size);
      free(image);
    }
  }
}

他の回答で提供されているリンクを使用して、これに BMP ヘッダーを解析するコードを簡単に追加できます。

于 2009-06-26T07:55:52.373 に答える
3

他の人が提案したように fopen と fread を使用してください。bmp ヘッダーの形式については、こちらをご覧ください。

于 2009-06-26T07:13:10.803 に答える
2

fopen の後に fread が続く

于 2009-06-26T07:05:10.523 に答える
1

ImageMagickは BMP をサポートしています。低レベルのMagickCoreまたはより高レベルのMagick Wandの 2 つの C API のいずれかを使用できます。

于 2009-06-26T07:05:01.787 に答える
0

このファイルが RLE メソッドを使用して圧縮されていないことを確認してください。それ以外の場合は、ヘッダー ファイルを読み取ってそのサイズを把握した後、ファイルから読み取り、バッファーにダンプして画像を再構築する必要があります。

于 2009-06-26T08:38:11.040 に答える