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


  • 相关阅读:
    [java学习]java聊天室通信原理
    竖变横表存储过程(万能型)
    到底是什么(反射,泛型,委托,泛型)
    删除表里重复记录两种方法
    三个SQL视图查出所有SQL Server数据库字典
    三种分页语句
    DBHelper
    SQL全局变量
    今天比较STRING和INT,很奇怪
    表之间数据交换与翻页存储过程
  • 原文地址:https://www.cnblogs.com/alan666/p/8311951.html
Copyright © 2011-2022 走看看