位图结构

原创 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位图结构很详细的说明和示例作者:立志转自:http://www.madio.net/tool/thread-1995-1-1.html 一、文件格式 Bmp文件是非常常用的位图文件,...
  • fandongguang0702
  • fandongguang0702
  • 2016年06月26日 10:45
  • 1595

位图BITMAP结构

数字媒体对于图像的处理肯定离不开对于位图的有关处理,首先要弄清楚位图的结构才能进行下面的工作。位图(Bitmap)图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图...
  • SDDCCCC
  • SDDCCCC
  • 2013年10月02日 16:00
  • 3201

数据结构之位图(bitmap)详解 (转)

1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 位图实现 (1)自己实现 在位图中,...
  • Primeprime
  • Primeprime
  • 2016年07月14日 10:34
  • 1403

哈希的拓展——位图

关于哈希表,我们需要拓展一些知识,在这有一个位图需要我们理解。首先我们来看一道腾讯的题。 给4 0 亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这4 0 亿个数中。这...
  • qq_26768741
  • qq_26768741
  • 2016年11月08日 16:01
  • 870

BitMap(位图)结构的C++实现

简介位图是一种非常常见的结构,它使用每个二进制位来存放一个值的状态,正因为这个性质,它经常被用在数据压缩或者是索引等方面。有这样一道题:给40亿个不重复的无符号整数,没有经过排序,然后再给一个树,如何...
  • MBuger
  • MBuger
  • 2017年03月12日 19:44
  • 539

ORACLE空间管理实验4:块管理之ASSM三级位图结构

DUMP L1 L2 L3,解读DUMP信息。 在表空间中建第一个表(注意,第一个),这个表从数据文件的第几个块开始使用 Extent Map和Auxillary Map的区别与作用 什么是EMP B...
  • q947817003
  • q947817003
  • 2014年01月27日 21:50
  • 1772

数据库位图索引的优缺点

数据库BTree索引、Hash索引、Bitmap位图索引的优缺点  (2016-01-05 17:13:40) 转载▼ http://www.devnote.cn/article/360.h...
  • pzqingchong
  • pzqingchong
  • 2016年03月24日 15:02
  • 2811

ASSM与三级位图结构

--ASSM与三级位图结构 ASSM的整体结构是3层位图块 + 数据库,即共4层的树状结构。 第一层位图块称为L3块,一个L3块中可以存放多个L2块的地址,一个L2块中存放多个L1的地址,...
  • u013169075
  • u013169075
  • 2016年11月28日 20:10
  • 269

MFC基础知识(三)——用DIB位图显示图像

本文主要介绍:DIB位图的一些基础知识和在MFC中如何利用DIB位图显示图像。 一、DIB位图结构及注意点: 1.DIB结构: 一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存...
  • hong__fang
  • hong__fang
  • 2015年03月11日 15:35
  • 2212

位图(.bmp)文件结构

bmp位图主要分为4部分,文件头、信息头、调色板(24位位图和32位位图没有调色板)、图像数据区。 文件头定义如下:typedef struct tagBITMAPFILEHEADER { WO...
  • lindorx
  • lindorx
  • 2017年12月08日 22:10
  • 7
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位图结构
举报原因:
原因补充:

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