请问DDB和DIB各自的用途、用法,区别与联系?

sleepingboy 2003-05-06 08:29:07
有没有详尽而又准确的教程?中文最好,英文也行。

我看书是越看越乱了。
HBITMAP,BITMAP都是干什么的?
装载一个.bmp文件是怎么一回事?
好多概念一点都不清晰,不知如何入手了。
...全文
30 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sleepingboy 2003-05-08
下午找到了。

呵呵。
回复
starkey 2003-05-07
GDI位图对象是由MFC库CBitmap类表示的。GDI位图对象有一个与之关联的Windows数据结构,它在Windows GDI模块中进行维护,是设备相关的。程序可以获得位图数据的副本,但是其中位的排列则取决于显示硬件。在同一台机器中,GDI位图可以在各个程序之间任意进行传输,但是,由于是设备相关的,所以通过磁盘来传输就没什么意义了。
DIB是设备无关的,它带有自己的颜色信息,所以,调色板管理起来更容易。运行Windows的任何机器都可以处理DIB,通常存储在BMP文件之中。
GDI位图只是另一个GDI对象,例如笔和字体。你必须先创建一个位图然后将它选入设备环境。
使用GDI最简单的方法是从资源中加载它。
LoadBitmap负责将一个基于资源的DIB位图转换为GDI位图。
HBITMAP是个位图句柄,好像是LoadImage的返回类型,BITMAP是个结构,包含了一些位图信息,例如长宽之类的。
对于DIB,MFC没有提供处理的类,不过好多书上多有这种DIB类,大同小异。
个人的一些经验,GDI处理图像不太方便,好像也就是显示之类的。
一般处理图像,例如对图像进行一些变换,用的都是DIB,从一本书上copy DIB类,添加到工程中,然后可以随意对图像进行处理了。
回复
sleepingboy 2003-05-07
《programming windows》?

Charles Petzold的那本?

广州哪里能买到?
回复
wangxil 2003-05-07
补充一句:该书分上下册,下册用了好几章讲这个问题
回复
wangxil 2003-05-07
《windows程序设计》这本书讲很清楚
回复
starkey 2003-05-07
我上面说DIB通常都是BMP格式,其实,你硬盘上所有的图片都是设备无关位图。只不过BMP是最简单和最常用的。
以BMP来说,虽然有8色、16色、256色、16位、24位、32位,但格式是一样的,这你可以看一下BMP的结构就知道了,只不过调色板不同,或根本不用调色板。
前面说过设备相关位图只是另一个GDI的对象,GDI是图形设备接口。
个人理解DDB和DIB并不是格式上的区别,而是概念上的区别。
举例来说,你在资源里加载一个bmp文件,这是个设备无关位图,LoadBitmap把它转换为一个设备相关位图,其做的工作,个人认为是创建了一个Windows数据结构,也就是CBitmap(这个结构是和设备相关的),然后把这个结构选入到GDI对象中。
看个实例:
CView::OnDraw(CDC* pDC)
{
CBitmap bitmap;
CDC dcMem;
bitmap.LoadBitmap("XXX");//XXX是*.bmp在资源中的名字
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&bitmap);
.....
}

设备无关位图通常是作为另一个GDI的对象,如笔,刷之类,或选入CDC用于显示。
如果你把CBitmap这个结构copy到别的机器上去的话是没有意义的。也就是设备相关。

全是个人理解,不对莫怪哦。
回复
sleepingboy 2003-05-07
DIB有8色、16色、256色、16位、24位、32位多种。
它们的文件格式都有多少种可能?
装载转换成DDB之后是什么样子的?
这个设备有关,
那么不同设备下分别是怎样的?
回复
whatkindu 2003-05-06
我也很想知道啊,帮你UP下吧。
回复
发动态
发帖子
机器视觉
创建于2007-08-27

3772

社区成员

图形图像/机器视觉
申请成为版主
社区公告
暂无公告