设备无关位图即独立于设备的位图(DIB)与“Device-Dependent Bitmaps (DDB) 设备相关位图”相比,它不再依赖于具体的设备,从而更适合在不同的计算机之间传输和显示。它包含一个颜色表,颜色表描述像素值如何对应于RGB颜色值,其描述通过发光产生的颜色。因此,DIB可以在任何设备上实现适当的配色方案。DIB包含以下颜色和尺寸信息:

  • 创建矩形图像的设备的颜色格式。
  • 创建矩形图像的设备的分辨率。
  • 创建图像的设备的调色板。
  • 将红,绿,蓝(RGB)三元组映射到矩形图像中的像素的位阵列。
  • 一个数据压缩标识符,指示用于减少位阵列大小的数据压缩方案(如果有的话)。

颜色和尺寸信息存储在BITMAPINFO结构中,该结构由一个BITMAPINFOHEADER结构组成,后跟两个或多个RGBQUAD结构。BITMAPINFOHEADER结构指定像素矩形的尺寸,描述设备的颜色技术,并标识用于减小位图大小的压缩方案。RGBQUAD结构标识出现在像素矩形中的颜色。DIB有两种:

  • 自下而上的DIB,其中原点位于左下角。
  • 自顶向下的DIB,其中原点位于左上角。

如果由位图信息头结构的Height成员指示的DIB的高度为正值,则为自下而上的DIB;如果高度是负值,则它是自顶向下的DIB。自上而下的DIB无法压缩。

颜色格式是根据颜色平面和色彩位数计算的。彩色飞机总数为1;对于单色位图,彩色位的计数为1,VGA位图为4,对于其他颜色设备的位图为8,16,24或32。应用程序通过调用GetDeviceCaps函数检索特定显示(或打印机)使用的颜色位数,将BITSPIXEL指定为第二个参数。

显示设备的分辨率以像素/米为单位指定。应用程序可以通过以下三个步骤来检索视频显示器或打印机的水平分辨率。

  1. 调用GetDeviceCaps函数,指定HORZRES作为第二个参数。
  2. 再次调用GetDeviceCaps,指定HORZSIZE作为第二个参数。
  3. 将第一个返回值除以第二个返回值。

应用程序可以通过使用具有不同参数的相同三步过程来检索垂直分辨率:VERTRES代替HORZRES,VERTSIZE代替HORZSIZE。

调色板由RGBQUAD结构数组表示,它们在显示设备的调色板中为每个颜色指定了红色,绿色和蓝色强度分量。调色板阵列中的每个颜色索引映射到与位图相关联的矩形区域中的特定像素。该数组的大小(以位为单位)等于矩形的宽度(以像素为单位)乘以矩形的高度(以像素为单位)乘以设备的颜色位数。应用程序可以通过调用GetDeviceCaps函数来检索设备调色板的大小,并将NUMCOLORS指定为第二个参数。

Windows支持8-bpp和4-bpp自下而上DIB的调色板阵列的压缩。可以使用游程长度编码(RLE)方案来压缩这些阵列。RLE方案使用2字节值,第一个字节指定使用颜色索引的连续像素数,第二个字节指定索引。有关位图压缩的更多信息,请参阅BITMAPINFOHEADER,BITMAPFILEHEADER,BITMAPV4HEADER和BITMAPV5HEADER结构的说明。

应用程序可以通过初始化所需的结构并调用GetDIBits函数从DDB创建DIB。要确定设备是否支持此功能,请调用GetDeviceCaps函数,将RC_DI_BITMAP指定为RASTERCAPS标志。

需要复制位图的应用程序可以使用TransparentBlt将源位图中的所有像素复制到目标位图,除了与透明颜色匹配的像素。

应用程序可以使用DIB通过调用SetDIBitsToDevice或StretchDIBits函数来设置显示设备上的像素。要确定设备是否支持SetDIBitsToDevice功能,请调用GetDeviceCaps函数,将RC_DIBTODEV指定为RASTERCAPS标志。将RC_STRETCHDIB指定为RASTERCAPS标志,以确定设备是否支持StretchDIBits。

只需要显示一个预先存在的DIB的应用程序就可以使用SetDIBitsToDevice函数。例如,电子表格应用程序可以打开现有的图表,并通过使用SetDIBitsToDevice函数将其显示在窗口中。然而,要在窗口中重复重绘位图,应用程序应使用BitBlt函数。例如,将动画图形与声音结合在一起的多媒体应用程序将受益于调用BitBlt函数,因为它执行速度比SetDIBitsToDevice快。

原文:https://msdn.microsoft.com/en-us/library/dd183562(v=vs.85).aspx

相关阅读:

BMP图像数据格式详解

Device-Dependent Bitmaps (DDB) 设备相关位图

device-independent bitmap (DIB) 设备无关位图的更多相关文章

  1. windows设备相关位图与设备无关位图

    windows支持两种位图格式,DDB(device-dependent bitmap),DIB(device-independent bitmap).设备相关位图用于windows显示系统中,其图像 ...

  2. 第15章 设备无关位图_15.3 DIB和DDB的结合

    第15章 设备相关位图_15.3 DIB和DDB的结合 15.3.1 从DIB创建DDB (1)hBitmap =CreateDIBitmap(…)——注意这名称会误导,实际上创建的是DDB 参数 说 ...

  3. 第15章 设备无关位图_15.1 DIB文件格式

    15.1 DIB文件格式(一种文件格式,扩展名为BMP) 15.1.1 OS/2风格的DIB 文件格式 字段 说明 文件头 (BITMAPFILEHEADER) 1.共14个字节 2.缩写建议用bmf ...

  4. 第15章 设备无关位图_15.2 显示和打印DIB

    15.2.1 探究DIB (1)DIB文件的结构 整个文件 紧凑DIB(整个文件除文件头) 文件头(File Header) 信息头(Information Header) 信息头(Informati ...

  5. Device-Dependent Bitmaps (DDB) 设备相关位图

    设备相关的位图(DDB)使用单一结构BITMAP结构描述.该结构的成员指定矩形区域的宽度和高度,以像素为单位;将条目从设备调色板映射到像素的数组的宽度;以及器件的颜色格式,在每个像素的颜色平面和位数方 ...

  6. WPF 与设备无关的单位

    WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都 ...

  7. 论wpf的设备无关性 - 简书

    原文:论wpf的设备无关性 - 简书 WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile ...

  8. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  9. 依赖于设备的位图(DDB) ,CreateCompatibleBitmap用法

    DDB(Device-dependent bitmap)依赖于具体设备,这主要体现在以下两个方面: DDB的颜色模式必需与输出设备相一致.例如,如果当前的显示设备是256色模式,那么DDB必然也是25 ...

随机推荐

  1. Helloworld.JaVa 第一次编程

    package Jc; class Jc1st { public static void main(String[] args) { System.out.println("Hello Wo ...

  2. 20145313张雪纯 《Java程序设计》第2周学习总结

    20145313张雪纯 <Java程序设计>第2周学习总结 教材学习内容总结 3.1.1类型 整数:分为short整数(2字节).int整数(4字节).long整数(8字节). 字节:by ...

  3. TeeChart.Direct2D.dll的使用

    这个dll本身依赖于第三方的控件,SlimDX ,可以从 http://slimdx.org/ 下载.  .net4.0的版本区分x86和x64 帧数的概念 我们通常说帧数,简单地说,就是在1秒钟时间 ...

  4. 使用httpclient提交表单数据加号(+)会被自动替换成空格的坑

    坑的场景: 今天使用httpclient-4.5.3版本,发送如下报文: { "idNo": "7+6+0+2ce722a546b39463bd62817fe57f8&q ...

  5. 机器学习笔记—混合高斯和 EM 算法

    本文介绍密度估计的 EM(Expectation-Maximization,期望最大). 假设有 {x(1),...,x(m)},因为是无监督学习算法,所以没有 y(i). 我们通过指定联合分布 p( ...

  6. node.js 之 http 架设

    Node.js 安装配置 下载node.js安装mis 打开:cmd cd到node.js安装目录下 输入nodejs --version 显示版本号,证明安装成功 在其根目录下建server.js ...

  7. Linux权限控制

    文件属性 权限说明 文件用户组调 权限设置建议 文件属性 在shell环境里输入:ls -l 可以查看当前目录文件.如: drwxr-xr-x. 14 root root 4096 Apr 5 18: ...

  8. 又是新动作!微信小程序专属二维码出炉

    又到了晚上,微信又给我们带来了惊喜,并这次不是新的能力,而是把大家再熟悉不过的二维码换了新的造型. 正式揭晓:微信特制的小程序码.扫一扫新二维码 只要你的微信升级到了 6.5.7 版本,就可以扫码或者 ...

  9. Java 练习题摘录

    2018-01-21 23:23:08 1.finally与return同时出现的情况 finally中有return语句则会使try...catch中的return语句失效 public stati ...

  10. MySQL之长连接、短连接、连接池

    当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...