C ++ Opengl BMP如何设法从头部提取宽度和高度?

时间:2013-12-28 10:45:35

标签: c++ opengl

这是我的第一篇文章,所以如果我写错了,我很抱歉。我无法理解如何从标题中提取高度和宽度。这是代码直到我感兴趣的部分。

GLuint load_bmp(const char* imagepath)
{
    unsigned char header[54];
    unsigned int imageSize;
    unsigned int dataPos;
    unsigned int width;
    unsigned int height;
    unsigned char *data;

    FILE *file=fopen(imagepath,"rb");

    if(!file)
    {
        return false;
    }
    else
    {
        if(fread(header,1,54,file)!=54)
        {
            return false;
        }
        if((header[0]!='B')||(header[1]!='M'))
        {
            return false;
        }
        dataPos=*(int*)&header[0x0A];//This line
        imageSize=*(int*)&header[0x22];//This line
        height=*(int*)&header[0x12];//This line
        width=*(int*)&header[0x16];//This line
    }
}

如何使用这4行代码获得正确的值?

1 个答案:

答案 0 :(得分:1)

标头被读入缓冲区。然后,有问题的行将地址转换为该缓冲区,就像它们指向二进制整数一样,然后读取它们。

因此,例如,高度是一个四字节整数,由从头[0x12]到头[0x15]的字节表示。代码将第一个字节的地址转换为指向一个整数,然后读取该整数指针的内容。我不知道C ++是否比C有更多的保证,但如果没有,那么代码会对int的大小和字节表示做出一些假设,这些假设在某些环境中不起作用。