zoukankan      html  css  js  c++  java
  • #pragma pack 在BITMAP结构体定义中的使用

    BITMAP位图文件主要分为如下3个部分:
    块名称
    对应Windows结构体定义
    大小(Byte
    文件信息头 BITMAPFILEHEADER 14
    位图信息头 BITMAPINFOHEADER 40
    RGB颜色阵列 BYTE* 由图像长宽尺寸决定



    定义BITMAP  文件信息头,位图信息头的  代码 如下:


    #pragma pack(push) /* 将当前pack设置压栈保存;把原来对齐方式设置压栈 */
    #pragma pack(1)    /* 设新的对齐方式设置为一个字节对齐必须在结构体定义之前使用,这是为了让结构体中各成员按1字节对齐 */


    typedef struct tagBITMAPFILEHEADER { /* bmfh */   //文件信息头
    unsigned short bfType; 
    unsigned long  bfSize;
    unsigned short bfReserved1;
    unsigned short bfReserved2;
    unsigned long  bfOffBits;
    } BITMAPFILEHEADER;


    typedef struct tagBITMAPINFOHEADER { /* bmih */     //位图信息头
    unsigned long  biSize;
    unsigned long  biWidth;
    unsigned long  biHeight;
    unsigned short biPlanes;
    unsigned short biBitCount;
    unsigned long  biCompression;
    unsigned long  biSizeImage;
    unsigned long  biXPelsPerMeter;
    unsigned long  biYPelsPerMeter;
    unsigned long  biClrUsed;
    unsigned long  biClrImportant;
    } BITMAPINFOHEADER;


    #pragma pack(pop) /* 恢复先前的pack设置;作用:恢复对齐状态 */


    ---------------------------------------------------------------------------------

    注意:一定要让结构体中各成员按1字节对齐,否则就不能保证文件信息头的大小为14字节,位图信息头为40字节了!

    加入push和pop可以使对齐恢复到原来状态


  • 相关阅读:
    Android开发系列之ListView用法
    自省
    fake feeling ?
    我心中的天使
    2020.6.16
    python面试题
    tcp
    Short + skip + limit
    01_pyttsx3_将文本文字转为语音播放
    mongo_Linux下不进入数据库查数据
  • 原文地址:https://www.cnblogs.com/alan666/p/8311951.html
Copyright © 2011-2022 走看看