(设备管理)2020年与设备无关的位图

上传人:管****问 文档编号:128694265 上传时间:2020-04-21 格式:DOC 页数:126 大小:930.72KB
返回 下载 相关 举报
(设备管理)2020年与设备无关的位图_第1页
第1页 / 共126页
(设备管理)2020年与设备无关的位图_第2页
第2页 / 共126页
(设备管理)2020年与设备无关的位图_第3页
第3页 / 共126页
(设备管理)2020年与设备无关的位图_第4页
第4页 / 共126页
(设备管理)2020年与设备无关的位图_第5页
第5页 / 共126页
点击查看更多>>
资源描述

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

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

2、nternet上比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在19

3、88年发布,并且是第一个包含了类似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首先作为一种文件格

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

5、别的内存DIB直接设定和操作图素位。在内存中加载了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 tagBITMAPFI

7、LEHEADER / bmfh 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内定义的结构可能与这不完全相同,但在功能上是相同的。第一个注

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

9、息表头中的信息,为了使用的方便提供在这里。在OS/2样式的DIB内,BITMAPFILEHEADER结构后紧跟了BITMAPCOREHEADER结构,它提供了关于DIB图像的基本信息。紧缩的DIB(Packed 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 pixel

10、s WORD bcPlanes ; / = 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 因为RGBTRIPLE结构的长度是3字节,许多RG

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

当前位置:首页 > 商业/管理/HR > 经营企划

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