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可以使对齐恢复到原来状态


  • 相关阅读:
    数据结构做题一些总结
    ExecuteNoQuery执行, 报错“go”附近有语法错误。
    EF总结
    哨兵模式
    Redis 发布订阅
    Redis 持久化
    Redis 事务 和乐观锁
    缓存穿透和雪崩
    Redis 基础知识
    Redis 三种特殊的数据类型
  • 原文地址:https://www.cnblogs.com/alan666/p/8311951.html
Copyright © 2011-2022 走看看