如何使用C程序将.bmp图像转换为字节数组

时间:2015-03-15 07:54:04

标签: c arrays graphic

我有一个1280 x 720像素的.bmp文件,我想加载到image2中,声明如下:

  

uint8_t * imageByte = NULL;

image2是一个名为home1.bmp

的文件

我想读取bmp文件并将.bmp图像转换为字节数组imageByte,我将用它来与home.bmp进行比较

我对c编程比较新,所以任何人都可以告诉我应该如何使用它?谢谢! 这是我的bmp图像比较代码的一部分,它将比较image1和image2

# define BYTES_PER_PIXEL 4
# define BITMAP_HEADER 54
 int temp_width = 1280;
 int temp_height = 720;
 int temp_x = 0;
 int temp_y = 0;
 uint8_t k = 0;
 char* image1= "E:\\home.bmp";
 fp = fopen(image,"rb"); 
 fseek(fp, 0, SEEK_SET);
fseek(fp, BITMAP_HEADER, SEEK_SET);
for(temp_y=0; temp_y<temp_height; temp_y++)
{
    temp_x = 0; 

    for(temp_x=0; temp_x < (temp_width * BYTES_PER_PIXEL); temp_x++)
    {
        int read_bytes = fread(&k, 1, 1, fp);
        if(read_bytes != 0)
        {
            if(k != imageByte[temp_x])
            {

                printf("CompareImage :: failed \n");
                fclose(fp);

            }
        }
        else
        {
           printf("CompareImage :: read failed \n");
        }
    }
}
 printf("CompareImage :: passed \n");

1 个答案:

答案 0 :(得分:3)

如上所述,BMP文件以 1]一个文件头,提供有关文件的信息,如size ..etc 2] BMP信息标题,提供有关BMP属性的更多信息 这些结构具有固定的大小

以下链接似乎是您的完美参考 http://paulbourke.net/dataformats/bmp/

你应该能够摆脱逐字节比较,这在大多数情况下都是昂贵的,只需读取从开头和比较结构的两个标题。 仅逐字节比较标头匹配。

希望有所帮助

相关问题