DDB(设备相关位图)

DDB依赖于具体设备:
DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的。
在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。
由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中

DIB的与设备无关性主要体现在以下两个方面:
DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。
256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。
由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象

DDB的创建
MFC的CBitmap类封装了DDB。该类提供了几个函数用来创建DDB:
BOOL LoadBitmap( LPCTSTR lpszResourceName ); 
BOOL LoadBitmap( UINT nIDResource ); 
该函数从资源中载入一幅位图,若载入成功则返回TRUE。资源位图实际上是一个DIB,该函数在载入时把它转换成了DDB。

BOOL CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits ); 
该函数用来创建一幅空白的DDB。参数nWidth和nHeight以像素为单位说明了位图的宽度和高度。nPlanes是DDB的色平面数,nBitcount是每个色平面的颜色位数。一般来说,nPlanes为1,而nBitcount代表DDB中每个像素值所占的位数,但在创建16色DDB时,nPlanes为4,而nBitcount为1。参数lpBits指向存储像素阵列的数组,该数组应该逐行存储位图的每个像素值。注意,数组中每行像素的数目必需是偶数个字节,如果是奇数,则应该用0补足。若创建成功函数返回TRUE。

BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nHeight ); 
该函数创建一个与指定设备上下文兼容的DDB。参数pDC指向一个设备上下文,nWidth和nHeight是DDB的尺寸。若创建成功函数返回TRUE

DIB(设备无关位图)

至于DIB,MFC未提供现成的类来封装DIB。要想使用DIB,首先应该了解DIB的结构。这个你可以
到任何一本图像处理资料中找到详细说明。

DIB的颜色信息储存在自己的颜色表中,程序一般要根据颜色表为DIB创建逻辑调色板。在输出一幅DIB之前,程序应该将其逻辑调色板选入到相关的设备上下文中并实现到系统调色板中,然后再调用相关的GDI函数(如::SetDIBitsToDevice或::StretchDIBits)输出DIB。在输出过程中,GDI函数会把DIB转换成DDB,这项工作主要包括以下两步:

将DIB的颜色格式转换成与输出设备相同的颜色格式。例如,在真彩色的显示模式下要显示一个256色的DIB,则应该将其转换成24位的颜色格式。

将DIB像素的逻辑颜色索引转换成系统调色板索引。

最新文章

  1. 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记.
  2. 数值分析之QR因子分解篇
  3. Mysql优化系列(0)--总结性梳理
  4. 20145330《Java程序设计》课程总结
  5. Java环境环境配置
  6. 贴图在Unity中的设置
  7. vim 添加到右键 windows
  8. 类和ID选择器的区别
  9. linux 和 ubuntu 修改主机名
  10. js常用正则表达式汇总
  11. GO的GDB调试
  12. Python逻辑运算符
  13. JDK源码分析(2)之 Array 相关
  14. std::remove_reference
  15. Java学习——集合框架【4】
  16. Tensorflow中神经网络的激活函数
  17. sqlserver 书查询 之二
  18. Maven继承
  19. freeswitch控制台日志级别设置以及存储
  20. python列表复习

热门文章

  1. [Ext JS 4] 布局之实战一 - 中间区块不会自动伸展 (tab)
  2. raphael入门到精通---属性和事件篇
  3. iOS:原生二维码扫描
  4. 五子棋Web版的开发(一)---搭建IDEA SSH环境
  5. comparable与comparator比较
  6. XCode里遇到 #include <XXX.h>file not found的解决方案
  7. Android Gradle 配置选项合集
  8. XMLTProcessor根据XSLT样式规则将节点转换为document对象
  9. javascript 变量 命名规范 变量的作用域
  10. dubbo服务者配置说明