windows读取bmp格式图像代码移植linux;windows代码移植linux,数据类型不匹配我问题;

来源:互联网 发布:泉州金蝶软件 编辑:程序博客网 时间:2024/06/02 14:53

以下面的代码是bmp在windows下的结构体定义:


typedef   struct   tagBITMAPFILEHEADER{          unsigned   short   bfType;       //2  此处需留意        unsigned   long    bfSize;         //4                              /*   File   size   in   bytes                     */          unsigned   short   bfReserved1;   //2        unsigned   short   bfReserved2;   //2         unsigned   long    bfOffBits;      //4                                  /*   Offset   to   image   data,   bytes   */    } __attribute__((packed))BITMAPFILEHEADER,   *PBITMAPFILEHEADER;  //Attention:"__"是两个"_"!  字边界对齐!4字节对齐   知道在linux的gcc下默认的是四字节的   typedef   struct   tagBITMAPINFOHEADER{          unsigned   long    biSize;              //4                 /*   Header   size   in   bytes            */           long         biWidth;               //4              /*   Width   of   image                         */           long         biHeight;                  //4          /*   Height   of   image                       */          unsigned short   biPlanes;        //2        /*   Number   of   colour   planes       */          unsigned short   biBitCount;       //2     /*   Bits   per   pixel                         */          unsigned   long biCompression;       //4           /*   Compression   type                     */          unsigned   long biSizeImage;    //4                  /*   Image   size   in   bytes               */          long   biXPelsPerMeter;     //4        long   biYPelsPerMeter;      //4  /*   Pixels   per   meter                     */          unsigned   long biClrUsed;       //4                   /*   Number   of   colours                   */          unsigned   long biClrImportant;       //4         /*   Important   colours                   */    } __attribute__((packed))BITMAPINFOHEADER,*PBITMAPINFOHEADER;     typedef   struct   tagRGBQUAD   {   unsigned   char   rgbBlue;   /*   Blue   value     */   unsigned   char   rgbGreen;   /*   Green   value   */   unsigned   char   rgbRed;   /*   Red   value       */   unsigned   char   rgbReserved;   /*   Reserved         */    }   RGBQUAD;   


    

下面是在linux下的:

要包含#include<stdint.h>头文件

#pragma pack(8)typedef   struct   tagBITMAPFILEHEADER{        uint16_t   bfType;       //2  此处需留意        uint32_t    bfSize;         //4                              /*   File   size   in   bytes                     */        uint16_t   bfReserved1;   //2        uint16_t   bfReserved2;   //2        uint32_t    bfOffBits;      //4                                  /*   Offset   to   image   data,   bytes   */  } __attribute__((packed))BITMAPFILEHEADER,   *PBITMAPFILEHEADER;  //Attention:"__"是两个"_"!  字边界对齐!4字节对齐   知道在linux的gcc下默认的是四字节的#pragma pack()#pragma pack(8)typedef   struct   tagBITMAPINFOHEADER{      uint32_t    biSize;              //4                 /*   Header   size   in   bytes            */      int32_t         biWidth;               //4              /*   Width   of   image                         */      int32_t         biHeight;                  //4          /*   Height   of   image                       */         uint16_t   biPlanes;        //2        /*   Number   of   colour   planes       */        uint16_t   biBitCount;       //2     /*   Bits   per   pixel                         */        uint32_t biCompression;       //4           /*   Compression   type                     */        uint32_t biSizeImage;    //4                  /*   Image   size   in   bytes               */        int32_t   biXPelsPerMeter;     //4        int32_t   biYPelsPerMeter;      //4  /*   Pixels   per   meter                     */        uint32_t biClrUsed;       //4                   /*   Number   of   colours                   */        uint32_t biClrImportant;       //4         /*   Important   colours                   */  } __attribute__((packed))BITMAPINFOHEADER,*PBITMAPINFOHEADER;#pragma pack()#pragma pack(4)typedef   struct   tagRGBQUAD   { unsigned   char   rgbBlue;   /*   Blue   value     */ unsigned   char   rgbGreen;   /*   Green   value   */ unsigned   char   rgbRed;   /*   Red   value       */ unsigned   char   rgbReserved;   /*   Reserved         */  }   RGBQUAD;#pragma pack()

个人总结

1字节     uint8_t     2字节     uint16_t     =unsigned   short4字节     uint32_t      =unsigned   long8字节     uint64_t int32_t =long


0 0