读书人

Windows程式开发设计指南(十五)与设

发布时间: 2012-10-13 11:38:17 作者: rapoo

Windows程式开发设计指南(十五)与装置无关的点阵图

15. 与装置无关的点阵图

在上一章我们了解到Windows GDI点阵图物件(也称为与装置相关的点阵图,或DDB)有许多程式设计用途。但是我并没有展示把这些点阵图储存到磁片档案或把它们载入记忆体的方法。这是以前在Windows中使用的方法,现在根本不用了。因为点阵图的位元格式相当依赖於设备,所以DDB不适用於图像交换。DDB内没有色彩对照表来指定点阵图的位与色彩之间的联系。DDB只有在Windows开机到关机的生命期内被建立和清除时才有意义。

在Windows 3.0中发表了与装置无关的点阵图(DIB),提供了适用於交换的图像档案格式。正如您所知的,像.GIF或.JPEG之类的其他图像档案格式在Internet上比DIB档案更常见。这主要是因为.GIF和.JPEG格式进行了压缩,明显地减少了下载的时间。尽管有一个用於DIB的压缩方案,但极少使用。DIB内的点阵图几乎都没有被压缩。如果您想在程式中操作点阵图,这实际上是一个优点。DIB不像.GIF和.JPEG档案,Windows API直接支援DIB。如果在记忆体中有DIB,您就可以提供指向该DIB的指标作为某些函式的参数,来显示DIB或把DIB转化为DDB。

DIB档案格式
 

有意思的是,DIB格式并不是源自於Windows。它首先定义在OS/2的1.1版中,该作业系统最初由IBM和Microsoft在八十年代中期开始开发。OS/2 1.1在1988年发布,并且是第一个包含了类似Windows的图形使用者介面的OS/2版本,该图形使用者介面被称之为「Presentation Manager(PM)」。「Presentation Manager」包含了定义点阵图格式的「图形程式介面」(GPI)。

然後在Windows 3.0中(发布於1990)使用了OS/2点阵图格式,这时称之为DIB。Windows 3.0也包含了原始DIB格式的变体,并在Windows下成为标准。在Windows 95(以及Windows NT 4.0)和Windows 98(以及Windows NT 5.0)下也定义了一些其他的增强能力,我会在本章讨论它们。

DIB首先作为一种档案格式,它的副档名为.BMP,在极少情况下为.DIB。Windows应用程式使用的点阵图图像被当做DIB档案建立,并作为唯读资源储存在程式的可执行档案中。图示和滑鼠游标也是形式稍有不同的DIB档案。

程式能将DIB档案减去前14个位元组载入连续的记忆体块中。这时就可以称它为「packed DIB(packed-DIB)格式的点阵图」。在Windows下执行的应用程式能使用packed DIB格式,通过Windows剪贴簿来交换图像或建立画刷。程式也可以完全存取DIB的内容并以任意方式修改DIB。

程式也能在记忆体中建立自己的DIB然後把它们存入档案。程式使用GDI函式呼叫就能「绘制」这些DIB内的图像,也能在程序中利用别的记忆体DIB直接设定和操作图素位元。

在记忆体中载入了DIB後,程式也能通过几个Windows API函式呼叫来使用DIB资料,我将在本章中讨论有关内容。与DIB相关的API呼叫是很少的,并且主要与视讯显示器或印表机页面上显示DIB相关,还与转换GDI点阵图物件有关。

除了这些内容以外,还有许多应用程式需要完成的DIB任务,而这些任务Windows作业系统并不支援。例如,程式可能存取了24位元DIB并且想把它转化为带有最佳化的256色调色盘的8位元DIB,而Windows不会为您执行这些操作。但是在本章和下一章将向您显示Windows API之外的操作DIB的方式。

OS/2样式的DIB
 

先不要陷入太多的细节,让我们看一下与首先在OS/2 1.1中出现的点阵图格式相容的Windows DIB格式。

DIB档案有四个主要部分:

读书人网 >windows

热点推荐