从bmp文件中读取字节

如何使用C读取bmp文件中的字节?

这是一个通用的骨架,只需加载二进制文件,并返回指向第一个字节的指针。 这归结为“fopen()后跟fread()”,但是更加冗长。 没有error handling,虽然检查错误,我相信这段代码是正确的。 此代码将拒绝空文件(根据定义,它不包含任何要加载的数据)。

#include  #include  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标头解析为此。

按照别人的建议使用fopen和fread。 有关bmp标题的格式,请看这里

fopen接着是fread

ImageMagick 支持BMP 。 您可以使用两个C API中的任何一个,即低级MagickCore或更高级别的Magick Wand 。

确保使用RLE方法不压缩此文件。 否则,在读取头文件并知道其尺寸后,您必须从文件中读取并转储到缓冲区中以重建图像。