社区
机器视觉
帖子详情
关于DDB与DIB概念的问题
xukunn1226
2003-09-11 02:14:36
想更清楚的了解一下DDB与DIB的概念以及二者在使用上的不同
高手请谈谈经验吧!
...全文
31
1
打赏
收藏
关于DDB与DIB概念的问题
想更清楚的了解一下DDB与DIB的概念以及二者在使用上的不同 高手请谈谈经验吧!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Freshyy
2003-09-11
打赏
举报
回复
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,MFC未提供现成的类来封装DIB。要想使用DIB,首先应该了解DIB的结构。这个你可以
到任何一本图像处理资料中找到详细说明。
DIB的颜色信息储存在自己的颜色表中,程序一般要根据颜色表为DIB创建逻辑调色板。在输出一幅DIB之前,程序应该将其逻辑调色板选入到相关的设备上下文中并实现到系统调色板中,然后再调用相关的GDI函数(如::SetDIBitsToDevice或::StretchDIBits)输出DIB。在输出过程中,GDI函数会把DIB转换成DDB,这项工作主要包括以下两步:
将DIB的颜色格式转换成与输出设备相同的颜色格式。例如,在真彩色的显示模式下要显示一个256色的DIB,则应该将其转换成24位的颜色格式。
将DIB像素的逻辑颜色索引转换成系统调色板索引。
windows程序设计(第五版)
DIB
和
DDB
的结合 16. 调色盘管理器 使用调色盘 调色盘动画 调色盘和真实世界图像
DIB
处理链接库 17. 文字和字体 简单的文字输出 字体的背景 逻辑字体 字体列举 段落格式 有趣的东西 18. Metafile 旧的 ...
VC++可视化编程指南
1.4与设备无关的位图(
DIB
) 11.5动画控件 11.6媒体控制接口(MCI). 11,7小结 第十二章 多线程与串行通信 12.1 多任务、进程和线程 12.2 线程的同步 12.3 串行通信与重叠I/O 12.4 一个通信...
VC++ 编程指南_中文chm
1.4与设备无关的位图(
DIB
) 11.5动画控件 11.6媒体控制接口(MCI). 11,7小结 第十二章 多线程与串行通信 12.1 多任务、进程和线程 12.2 线程的同步 12.3 串行通信与重叠I/O 12.4 一个通信...
《Visual C++数字图像处理开发入门与编程实践》源码
5.3.4 与
DIB
有关的函数 206 5.4 本章实例:
DIB
类的封装 208 5.4.1 设计 208 5.4.2 构造函数 210 5.4.3
DIB
位图的显示 214 5.4.4 BMP文件的存储 215 5.5 本章小结 216 第6章 使用GDI+处理数字图像 217 6.1 GDI+简介 ...
VC++编程指南(中文版).chm
1.4与设备无关的位图(
DIB
) 11.5动画控件 11.6媒体控制接口(MCI). 11,7小结 第十二章 多线程与串行通信 12.1 多任务、进程和线程 12.2 线程的同步 12.3 串行通信与重叠I/O 12.4 一个通信...
机器视觉
4,445
社区成员
15,335
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章