位图结构

原创 2011年01月16日 00:13:00

位图文件由4个部分组成:位图文件头(BITMAPFILEHEADER)

                                   位图信息头(BITMAPINFOHEADER)

                                   调色板(LOGPALETE)  (真彩图没有调色板)

                                   实际位图数据

  1. 位图文件头结构(14字节)
    typedef  struct  tagBITMAPFILEHEADER
    {
            WORD      bfType;               //文件类型,值为0x4d42,即字符串BM
            DWORD    bfSize;               //文件大小,即实际位图数据大小
            WORD      bfReserved1;     //保留字
            WORD      bfReserved2;     //保留字
            DWORD    bfOffBits;           //从文件头到实际数据的偏移字节数,即位图文件头+位图信息头+调色板的大小
      }BITMAPFILEHEADER;
  2. 位图信息头结构(40字节)
    typedef   struct   tagBITMAPINFOHEADER
    {
             DWORD     biSize;               //这个结构的大小,固定值40
             LONG        biWidth;             //图像宽度,单位为像素
             LONG        biHeight;            //图像高度,单位为像素
             WORD       biPlanes;           //调色板的数量,必须为1
             WORD       biBitCount;        //颜色使用的位数,1表示黑白二色,4表示16色,8表示256色,24表示真彩色
             DWORD     biCompression; //是否压缩,通常为BI_RGB,即不压缩
             DWORD     biSizeImage;      //实际位图数据的大小
             LONG         biXPelsPerMeter;//目标设备的水平分辨率,单位为像素/米
             LONG         biYPelsPerMeter;//目标设备的垂直分辨率,单位为像素/米
             DWORD      biClrUsed;          //指定图像实际用到的颜色数,如果为0,表示为2的bitBitCount次方种
             DWORD      biClrImportant;  //重要的颜色数,为0表示都重要
    }BITMAPINFOHEADER
  3. 调色板是一种GDI对象,可以认为它是一个颜色数组,列举了图像用到的所有颜色。但是对真彩色位图来说,是没有调色板的。此时,在位图信息之后直接是位图的 实际数据。调色板结构为LOGPALLETE
    typedef   struct   tagLOGPALETTE
    {
           WORD    palVersion;                        //表示系统的版本号
           WORD    palNumEntries;                  //表示调色板中包含的项目数,每一个项目表示一个颜色
           PALETTEENTRY   palPalEntry[l];        //表示PALETTEENTRY数组中的第一个颜色,PALETTEENTRY定义了颜色信息
  4. PALETTEENTRY结构定义如下
    typedef   struct   tagPALETTEENTRY
    {
            BYTE   pcRed;                      //表示红色分量
            BYTE   pcGreen;                  //表示绿色分量
            BYTE   pcBlue;                     //表示蓝色分量
            BYTE   pcFlags;                   //表示调色板中的项目如何被使用,可以为NULL
    }PALETTEENTRY
    对于使用了调色板的位图,位图实际数据描述的是像素值在调色板中的索引值,如果没有使用调色板,位图实际数据就是实际的RGB颜色值。

对于真彩色位图来说,没有调色板,一个像素需要3个字节来表示,在对位图数据进行操作时应该注意以下问题:
       1.位图数据每行的字节数必须是4的整数值
         以真彩色位图为例,如果位图的宽度为150,由于一个像素需要3个字节,因此一行需要450个字节,但是450并不是4的整数倍,需  要填充2个字节,变为452,为4的整数倍。这样一行需要填充2个字节。正式基于这个原因,在旋转位图时会导致源位图与目标位图的大小不一致,以150*100大小的位图为例,旋转后的图像大小为100*150,尤其旋转后的宽度为100,每行需要300个字节,正好是4的整数倍,因此不再需要填充字节了,这样就导致转换后的位图比原来的位图小。
        2.位图数据是从下向上存储的
        对于位图数据来说,最低端的数据表示的是位图的第一行颜色数据。最上方的数据表示的是位图的最后一行颜色数据,每一行数据表示的颜色仍是按照从左向右存储的。
        3.对于真彩色位图来说,每一行数据是按照RGB的颜色数序表示的
         真彩色位图每一行数据表示的颜色都是按照蓝、绿、红顺序。

相关文章推荐

BMP位图结构详解

BMP位图结构详解

【学习笔记】位图结构分析

Bmp文件是非常常用的位图文件,无论是游戏还是其他都被广泛使用。     首先,整个bmp文件的内容可以分为3到4块。之所以分为3到4块而不是固定的值,是因为,对于bmp来说可能存在调色板或者一些掩码...
  • tyu5658
  • tyu5658
  • 2014年01月13日 20:56
  • 430

BMP位图结构很详细的说明和…

原文地址:BMP位图结构很详细的说明和示例作者:立志转自:http://www.madio.net/tool/thread-1995-1-1.html 一、文件格式 Bmp文件是非常常用的位图文件,...

BMP位图结构

BMP(Bitmap)文件是windows采用的图形文件格式。其可分为与设备相关的位图(device dependent bitmap 简称DDB)和与设备无关的位图(device independe...

windows 位图结构详解

聚焦行业最佳实践,BDTC 2016完整议程公布       Java 编程入门(系列)        程序员11月书讯,评论得书啦        免费的知识库,你的知识库 ...

位图结构

位图信息头BITMAPINFOHEADER,也是一个结构,其定义如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidt...

位图结构和基础知识

1.1 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。那么Windows是如何显示图象的呢?这就要谈到位图(...

位图结构

BMP文件结构      1. BMP文件组成      BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。      2. BMP文件头      BMP文件头数据结构含有BMP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位图结构
举报原因:
原因补充:

(最多只允许输入30个字)