C を使用して bmp ファイルからバイトを読み取るにはどうすればよいですか?
5876 次
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 に答える