与设备无关的位图

上传人:llt8****5967 文档编号:232825935 上传时间:2021-12-31 格式:DOCX 页数:130 大小:453.33KB
返回 下载 相关 举报
与设备无关的位图_第1页
第1页 / 共130页
与设备无关的位图_第2页
第2页 / 共130页
与设备无关的位图_第3页
第3页 / 共130页
与设备无关的位图_第4页
第4页 / 共130页
与设备无关的位图_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《与设备无关的位图》由会员分享,可在线阅读,更多相关《与设备无关的位图(130页珍藏版)》请在金锄头文库上搜索。

1、与设备无关的位图涛儿软件工作室整理编译在上一章我们了解到Windows GDI位图对象也称为与设备相关的位图,或DDB有许多程序设计用途。然而我并没有展现把这些位图储存到磁盘文件或把它们加载内存的方法。这是往常在Windows中使用的方法,现在全然不用了。因为位图的位格式相当依靠于设备,因此DDB不适用于图像交换。DDB内没有色彩对比表来指定位图的位与色彩之间的联系。DDB只有在Windows开机到关机的生命期内被建立和清除时才有意义。在Windows 3.0中发表了与设备无关的位图(DIB),提供了适用于交换的图像文件格式。正如您所知的,像.GIF或.JPEG之类的其它图像文件格式在Inte

2、rnet上比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在198

3、8年公布,同时是第一个包含了类似Windows的图形使用者接口的OS/2版本,该图形使用者接口被称之为Presentation ManagerPM。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第一作为一种文件格式,它的扩展名为.BM

4、P,在极少情形下为.DIB。Windows应用程序使用的位图图像被当做DIB文件建立,并作为只读资源储存在程序的可执行文件中。图标和鼠标光标也是形式稍有不同的DIB文件。程序能将DIB文件减去前14个字节加载连续的内存块中。这时就能够称它为packed DIBpacked-DIB格式的位图。在Windows下执行的应用程序能使用packed DIB格式,通过Windows剪贴簿来交换图像或建立画刷。程序也能够完全存取DIB的内容并以任意方式修改DIB。程序也能在内存中建立自己的DIB然后把它们存入文件。程序使用GDI函数呼叫就能绘制这些DIB内的图像,也能在程序中利用别的内存DIB直截了当设定

5、和操作图素位。在内存中加载了DIB后,程序也能通过几个Windows API函数呼叫来使用DIB数据,我将在本章中讨论有关内容。与DIB相关的API呼叫是专门少的,同时要紧与视讯显示器或打印机页面上显示DIB相关,还与转换GDI位图对象有关。除了这些内容以外,还有许多应用程序需要完成的DIB任务,而这些任务Windows操作系统并不支持。例如,程序可能存取了24位DIB同时想把它转化为带有最正确化的256色调色盘的8位DIB,而Windows可不能为您执行这些操作。然而在本章和下一章将向您显示Windows API之外的操作DIB的方式。OS/2样式的DIB先不要陷入太多的细节,让我们看一下与

6、第一在OS/2 1.1中显现的位图格式兼容的Windows DIB格式。DIB文件有四个要紧部分: 文件表头 信息表头 RGB色彩对比表不一定有 位图图素位您能够把前两部分看成是C的数据结构,把第三部分看成是数据结构的数组。在Windows表头文件WINGDI.H中说明了这些结构。在内存中的packed DIB格式内有三个部分: 信息表头 RGB色彩对比表不一定有 位图图素位除了没有文件表头外,其它部分与储存在文件内的DIB相同。DIB文件不是内存中的packed DIB以定义为如下结构的14个字节的文件表头开始:typedef struct tagBITMAPFILEHEADER / bmf

7、h WORD bfType ; / signature word BM or 0x4D42 DWORD bfSize ; / entire size of file WORD bfReserved1 ; / must be zero WORD bfReserved2 ; / must be zero DWORD bfOffsetBits ; / offset in file of DIB pixel bits BITMAPFILEHEADER, * PBITMAPFILEHEADER ; 在WINGDI.H内定义的结构可能与这不完全相同,但在功能上是相同的。第一个注释确实是文字bmfh指出了给

8、这种数据型态的数据变量命名时举荐的缩写。假如在我的程序内看到了名为pbmfh的变量,这可能是一个指向BITMAPFILEHEADER型态结构的指针或指向PBITMAPFILEHEADER型态变量的指针。结构的长度为14字节,它以两个字母BM开头以指明是位图文件。这是一个WORD值0x4D42。紧跟在BM后的DWORD以字节为单位指出了包括文件表头在内的文件大小。下两个WORD字段设定为0。在与DIB文件格式相似的鼠标光标文件内,这两个字段指出光标的热点hot spot。结构还包含一个DWORD字段,它指出了文件中图素位开始位置的字节偏移量。此数值来自DIB信息表头中的信息,为了使用的方便提供在

9、那个地点。在OS/2样式的DIB内,BITMAPFILEHEADER结构后紧跟了BITMAPCOREHEADER结构,它提供了关于DIB图像的差不多信息。紧缩的DIBPacked DIB开始于BITMAPCOREHEADER:typedef struct tagBITMAPCOREHEADER / bmch DWORD bcSize ; / size of the structure = 12 WORD bcWidth ; / width of image in pixels WORD bcHeight ; / height of image in pixels WORD bcPlanes ;

10、 / = 1 WORD bcBitCount ; / bits per pixel (1, 4, 8, or 24) BITMAPCOREHEADER, * PBITMAPCOREHEADER ; core核心用在那个地点看起来有点奇特,它是指这种格式是其它由它所衍生的位图格式的基础。BITMAPCOREHEADER结构中的bcSize字段指出了数据结构的大小,在这种情形下是12字节。bcWidth和bcHeight字段包含了以图素为单位的位图大小。尽管这些字段使用WORD意味着一个DIB可能为65,535图素高和宽,然而我们几乎可不能用到那么大的单位。bcPlanes字段的值始终是1。那个字段是我们在上一章中遇到的早期Windows GDI位图对象的残留物。bcBitCount字段指出了每图素的位数。关于OS/2样式的DIB,这可能是1、4、8或24。DIB图像中的颜色数等于2bmch.bcBitCount,或用C的语法表示为:1 bmciColorsi 因为RGBTRIP

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号