簡體   English   中英

從bmp文件中讀取字節

[英]Reading bytes from bmp file

如何使用C讀取bmp文件中的字節?

這是一個通用的框架,只加載二進制文件,並返回指向第一個字節的指針。 這歸結為“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標頭解析為此。

按照別人的建議使用fopen和fread。 有關bmp標題的格式,請看這里

fopen接着是fread

ImageMagick 支持BMP 您可以使用兩個C API中的任何一個,即低級MagickCore或更高級別的Magick Wand

確保不使用RLE方法壓縮此文件。 否則,在讀取頭文件並知道其尺寸后,您必須從文件中讀取並轉儲到緩沖區中以重建圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM