BITMAPINFO结构

BITMAPINFO结构具有如下形式:
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO

BITMAPINFO结构定义了位图(DIB)的度量和颜色信息。

成员:

bmiHeader 指定了一个BITMAPINFOHEADER结构,包含了有关设备相关位图的度量和颜色格式的信息。
bmiColors 指定了一个RGBQUAD或DWORD数据类型的数组,定义了位图中的颜色。

注释:
位图(DIB)由两个部分组成:

(1) 一个BITMAPINFO结构,描述了位图的度量和颜色信息;
(2) 一个字节数组,定义了位图的像素。数组中的字节被组合在一起,但是每个扫描行必须用零填补,在一个LONG边界结束。如果高度为正的,位图的起始位置在左下角。如果高度为负,起始位置在左上角。
(3) BITMAPINFOHEADER结构中的biBitCount成员决定了定义像素的位数以及位图中的最大颜色数。这个成员可以是下列值之一:

· 位图是单色的,bmiColors成员包含两个入口。位图数组中的每一位代表一个像素。如果该位被清除,则用bmiColors表中的第一种颜色显示该像素。如果该位被置位,则用表中的第二种颜色显示该像素。
· 位图最多有16种颜色,bmiColors成员中包含了最多可达16个入口。位图中的每个像素用一个4位的值来表示,该值用作颜色表的索引。例如,如果位图中的第一个字节是0x1F,这个字节代表两个像素。第一个像素包含了颜色表中第二种颜色,第二个像素包含了颜色表中第十六种颜色。
· 位图最多有256种颜色,bmiColors成员包含了多达256个入口。在这种情况下,数组中的每个字节代表一个像素。
· 位图最多有216种颜色。BITMAPINFOHEADER的biCompression成员必须是BI_BITFIELDS。bmiColors成员包含了3个DWORD型颜色掩码,分别代表了每个像素中的红,绿和蓝色成分。DWORD型掩码中的位必须是连续的,不能与其它掩码重叠。并非像素中的所有位都必须被使用。数组中的每个WORD值代表一个像素。
· 位图最多具有224种颜色,bmiColors成员为NULL。位图数组中的每个三字节组合分别代表像素中蓝,绿红的深度。
· 位图中最多具有232种颜色。BITMAPINFOHEADER中的biCompression成员必须是BI_BITFIELDS。bmiColors成员中包含了三个DWORD颜色掩码,分别指定了像素的红,绿和蓝成分。DWORD掩码中的位必须是连续的,并且不能与其它掩码重叠。并非像素中的所有位都必须被使用。数组中的每个DWORD值代表一个像素。

BITMAPINFOHEADER结构中的biClrUsed成员指定了颜色表中实际使用的索引的数目。如果biClrUsed成员被设为0,位图将使用biBitCount成员中指定的最大颜色数。
bmiColors表中的颜色应当按照其重要性的顺序出现。另一种情况是,对于使用DIB函数,bmiColors成员可以是一个16位无符号整数的数组,指定了当前实现的逻辑调色板中的索引,而不是确切的RGB值。在这种情况下,使用位图的应用程序必须调用Windows的DIB函数(CreateDIBitmap,CreateDIBPatternBrush和CreateDIBSection),iUsage参数应被设为DIB_PAL_COLORS。
如果位图是一个压缩位图(这意味着,这种位图的数组直接跟在一个指针所引用的BITMAPINFO头的后面),在使用DIB_PAL_COLORS模式的时候,biClrUsed成员必须被设为偶数,以便使DIB位图数组从DWORD边界开始。
注意:
如果位图被保存在文件中,或者要被传送到另一个应用程序,bmiColors成员不能包含调色板索引。除非应用程序独占地使用和控制位图,位图的颜色表中应当包含准确的RGB值。

BITMAPINFO结构相关推荐

  1. 自定义结构体-相机参数数据类型

    当我们面对两组一样的参数类型时,比如现在我面对的就是打开两个相机,他们对应的参数类型是一样的,这时候就可以定义两个结构体数组,再定义两个相机的时候把他们都设为空,这样就不会警告了,而且效率更高了. t ...

  2. VC++和VC++.NET中与图像处理有关的几个概念、结构和类

    VC++和VC++.NET中与图像处理有关的几个概念.结构和类 最近一直在看VC++有关图像处理方面的书,终于把以前一直混淆的几个概念.结构和类弄清楚了,特整理如下.如有错误,请大家批评指正,不胜感激 ...

  3. 位图BITMAP结构

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

  4. 数字图像处理之位图在计算机中的存储结构

    位图是windows中广泛应用的一种图像格式,其后缀名为.bmp.位图也称为位映射图片. 一张位图包含了许许多多的像素点,每个像素点有不同的颜色.由此构成了五彩斑斓的位图图像, 然而正是因为由像素点这 ...

  5. windows 位图结构详解

    位图文件可看成由4个部分组成:位图文件头(bitmap-file header).位图信息头(bitmap-information header).彩色表(color table)和定义位图的字节阵列 ...

  6. NeHe OpenGL第三十五课:播放AVI

    NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错. ...

  7. MFC显示位图 from http://blog.csdn.net/liuzhuomju/article/details/7299458

    这些例子都在vs2005测试通过 一.最简单的一种1.将图像文件以资源形式加入工程中,IDB_BITMAP1 2.用一个PICTURE控件,在其属性中,将其Type设置为Bitmap 3.将Pitur ...

  8. bmp文件格式详细解析

    先区分几个概念:16色和16位色一样吗? 不一样! 颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值.通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色, ...

  9. VC++ .Net 实例学习

    VC++.NET中添加由C#编译的DLL引用的方法 http://blog.csdn.net/much0726/article/details/4986627 关于VC.NET的资料网络上确实非常少, ...

最新文章

  1. Apache Jackrabbit源码研究(五)
  2. MVVM框架下,WPF实现Datagrid里的全选和选择
  3. thinkjs——空对象判断
  4. 中移4G模块-ML302-OpenCpu开发-PCF8591测量电压
  5. android: listview与sqlite数据操作实例
  6. SpringBoot修改默认端口号
  7. pytorch——nn.BatchNorm2d()函数
  8. 拓端tecdat|用R语言中的神经网络预测时间序列:多层感知器和极限学习机
  9. xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
  10. 【数学和算法】加权平均法
  11. 从学校考的计算机是几级呀,计算机考级共分为几级
  12. 【中南林业科技大学】【陈】第十周作业sqi成绩管理系统
  13. nginx 引号 x22
  14. 多库多表场景下使用 Amazon EMR CDC 实时入湖最佳实践
  15. 三极管工作原理分析,精辟、透彻,看后你就懂
  16. [附源码]java毕业设计病历管理系统
  17. 小米android手机怎么刷机,刷机如此简单 小米手机四种刷机方法
  18. Spring Boot普通参数与基本注解
  19. 【单片机学习之旅】(1-2)stm32F407存储器及总线架构
  20. Leetcode-元素和小于等于阈值的正方形的最大边长(python)

热门文章

  1. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示
  2. fs react 使用 保存文件_使用FS进行文件同步和备份
  3. mysql function函数_详解MySQL如何按表创建千万级的压测数据
  4. 干货总结:I2C总线详细要点
  5. 异常处理_月隐学python第19课
  6. Linux如何访问mmio空间,一文读懂Linux下如何访问I/O端口和I/O内存
  7. 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe
  8. dex运行linux,随着三星最新的DeX更新,更多的手机可以使用Linux
  9. php 循环多条件,怎么循环带条件的数组
  10. java收获_java学习收获