DIB--设备无关位图文件
- 格式:doc
- 大小:46.50 KB
- 文档页数:4
所有文件后缀名大全常见的文件后缀名ACA Microsoft的代理使用的角色文档acf系统管理配置acm音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能aif声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player播放AIF音频文件,使用Windows Media Player播放AIFC音频文件,使用Windows Media Player播放AIFF音频文件,使用Windows Media Player播放ani动画光标文件扩展名,例如动画沙漏。
ans ASCII字符图形动画文件arc一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开arj压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开asf微软的媒体播放器支持的视频流,可以使用Windows Media Player播放asp微软的视频流文件,可以使用Windows Media Player打开asp微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门asx Windows Media 媒体文件的快捷方式au是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Waveform Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放.au文件avi一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片bak备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名bas Basic 语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basicbat批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用bbs电子告示板系统文章信息文件bfc Windows的公文包文件bin二进制文件,其用途依系统或应用而定bmp Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
ACA:Microsoft的代理使用的角色文档.acf:系统管理配置.acm:音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能.aif:声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player播放.AIF:音频文件,使用Windows Media Player播放.AIFC:音频文件,使用Windows Media Player播放.AIFF:音频文件,使用Windows Media Player播放.ani:动画光标文件扩展名,例如动画沙漏。
.ans:ASCII字符图形动画文件.arc:一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开.arj:压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开.asf:微软的媒体播放器支持的视频流,可以使用Windows Media Player播放.asp:微软的视频流文件,可以使用Windows Media Player打开.asp:微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门.asx:Windows Media 媒体文件的快捷方式.au:是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Waveform Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放.au文件.avi:一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片.bak:备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名.bas Basic:语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basic.bat:批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用.bbs:电子告示板系统文章信息文件.bfc:Windows的公文包文件.bin:二进制文件,其用途依系统或应用而定.bmp:Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
《文件拓展名》pif为DOS环境下的可执行文件在Windows下执行时所需要的文件格式常见的文件后缀名:ACA:Microsoft的代理使用的角色文档acf:系统管理配置acm:音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能aif:声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player 播放AIF:音频文件,使用Windows Media Player播放AIFC:音频文件,使用Windows Media Player播放AIFF:音频文件,使用Windows Media Player播放ani:动画光标文件扩展名,例如动画沙漏。
ans:ASCII字符图形动画文件arc:一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开arj:压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开asf:微软的媒体播放器支持的视频流,可以使用Windows Media Player播放asp:微软的视频流文件,可以使用Windows Media Player打开asp:微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门asx:Windows Media 媒体文件的快捷方式au:是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Waveform Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放au文件avi:一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片bak:备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名bas Basic:语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basicbat:批处理文件,在MS-DOS中,bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用bbs:电子告示板系统文章信息文件bfc:Windows的公文包文件bin:二进制文件,其用途依系统或应用而定bmp:Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
常见的文件后缀名大全文章来源:互联网acf系统管理配置acm音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能aif声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player播放AIF音频文件,使用Windows Media Player播放AIFC音频文件,使用Windows Media Player播放AIFF音频文件,使用Windows Media Player播放ani动画光标文件扩展名,例如动画沙漏。
ans ASCII字符图形动画文件arc一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开arj压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开asf微软的媒体播放器支持的视频流,可以使用Windows Media Player播放asp微软的视频流文件,可以使用Windows Media Player打开asp微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门asx Windows Media 媒体文件的快捷方式au是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Wavefor m Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放.au文件avi一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片bak备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名bas Basic 语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basicbat批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用bbs电子告示板系统文章信息文件bfc Windows的公文包文件bin二进制文件,其用途依系统或应用而定bmp Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows 和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。
由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源。
Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持。
下面以Notepad++为分析工具,结合Windows的位图数据结构对BMP文件格式进行一个深度的剖析。
BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header):提供文件的格式、大小等信息位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表位图数据(bitmap data):就是图像数据啦^_^下面结合Windows结构体的定义,通过一个表来分析这四个部分。
我们一般见到的图像以24位图像为主,即R、G、B三种颜色各用8个bit来表示,这样的图像我们称为真彩色,这种情况下是不需要调色板的,也就是所位图信息头后面紧跟的就是位图数据了。
因此,我们常常见到有这样一种说法:位图文件从文件头开始偏移54个字节就是位图数据了,这其实说的是24或32位图的情况。
这也就解释了我们按照这种程序写出来的程序为什么对某些位图文件没用了。
下面针对一幅特定的图像进行分析,来看看在位图文件中这四个数据段的排布以及组成。
我们使用的图像显示如下:这是一幅16位的位图文件,因此它是含有调色板的。
在拉出图像数据进行分析之前,我们首先进行几个约定:1. 在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据”。
与设备无关的位图(DIB)DIB(Device-indepentent bitmap)的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。
例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。
256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。
由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。
DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。
运行在不同输出设备下的应用程序可以通过DIB来交换图象。
DIB还可以用一种RLE算法来压缩图像数据,但一般来说DIB是不压缩的。
11.4.1 DIB的结构与Borland C++下的框架类库OWL不同,MFC未提供现成的类来封装DIB。
尽管Microsoft 列出了一些理由,但没有DIB类确实给MFC用户带来很多不便。
用户要想使用DIB,首先应该了解DIB的结构。
在内存中,一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存储像素阵列的数组。
BITMAPINFO描述了位图的大小,颜色模式和调色板等各种属性,其定义为typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1]; //颜色表} BITMAPINFO;RGBQUAD结构用来描述颜色,其定义为typedef struct tagRGBQUAD {BYTE rgbBlue; //蓝色的强度BYTE rgbGreen; //绿色的强度BYTE rgbRed; //红色的强度BYTE rgbReserved; //保留字节,为0} RGBQUAD;注意,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。
BITMAPINFOHEADER结构包含了DIB的各种信息,其定义为typedef struct tagBITMAPINFOHEADER{DWORD biSize; //该结构的大小LONG biWidth; //位图的宽度(以像素为单位)LONG biHeight; //位图的高度(以像素为单位)WORD biPlanes; //必须为1WORD biBitCount //每个像素的位数(1、4、8、16、24或32)DWORD biCompression; //压缩方式,一般为0或BI_RGB (未压缩)DWORD biSizeImage; //以字节为单位的图象大小(仅用于压缩位图)LONG biXPelsPerMeter; //以目标设备每米的像素数来说明位图的水平分辨率LONG biYPelsPerMeter; //以目标设备每米的像素数来说明位图的垂直分辨率DWORD biClrUsed; /*颜色表的颜色数,若为0则位图使用由biBitCount指定的最大颜色数*/ DWORD biClrImportant; //重要颜色的数目,若该值为0则所有颜色都重要} BITMAPINFOHEADER;与DDB不同,DIB的字节数组是从图象的最下面一行开始的逐行向上存储的,也即等于把图象倒过来然后在逐行扫描。
位图格式 BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。
它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。
在系统中以BMP为扩展名保存。
打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。
现在讲解BMP的4个组成部分:1.文件头信息块0000-0001 :文件标识,为字母ASCII码“BM”。
0002-0005 :文件大小。
0006-0009 :保留,每字节以“00”填写。
000A-000D :记录图像数据区的起始位置。
各字节的信息含义依次为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。
2.图像描述信息块000E-0011:图像描述信息块的大小,常为28H。
0012-0015:图像宽度。
0016-0019:图像高度。
001A-001B:图像的plane总数(恒为1)。
001C-001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。
001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。
0022-0025:图像区数据的大小。
0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002A-002D:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。
002E-0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。
3.颜色表颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。
其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R (红色)、alpha(32位位图的透明度值,一般不需要)。
即首先4字节表示颜色号0的颜色,接下来表示颜色号1的颜色,依此类推。
4.图像数据区颜色表接下来位是位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位;16色图像每点占4位;256色图像每点占8位;真彩色图像每点占24位。
DIB--设备无关位图文件百科名片DIB设备无关位图文件(Device Independent Bitmap),这是一种文件格式,是为了保证用某个应用程序创建的位图图形可以被其它应用程序装载或显示一样。
DIB 的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。
例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。
256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。
由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。
DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。
运行在不同输出设备下的应用程序可以通过DIB来交换图象。
目录DIB的结构与Borland C++下的框架类库OWL不同,MFC未提供现成的类来封装DIB。
尽管Microsoft列出了一些理由,但没有DIB类确实给MFC用户带来很多不便。
用户要想使用DIB,首先应该了解DIB的结构。
在内存中,一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存储像素阵列的数组。
BITMAPINFO描述了位图的大小,颜色模式和调色板等各种属性,其定义为typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1]; //颜色表} BITMAPINFO;RGBQUAD结构用来描述颜色,其定义为typedef struct tagRGBQUAD {BYTE rgbBlue; //蓝色的强度BYTE rgbGreen; //绿色的强度BYTE rgbRed; //红色的强度BYTE rgbReserved; //保留字节,为0} RGBQUAD;注意,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。
BITMAPINFOHEADER结构包含了DIB的各种信息,其定义为typedef struct tagBITMAPINFOHEADER{DWORD biSize; //该结构的大小LONG biWidth; //位图的宽度(以像素为单位)LONG biHeight; //位图的高度(以像素为单位)WORD biPlanes; //必须为1WORD biBitCount //每个像素的位数(1、4、8、16、24或32)DWORD biCompression; //压缩方式,一般为0或BI_RGB (未压缩)DWORD biSizeImage; //以字节为单位的图象大小(仅用于压缩位图) LONG biXPelsPerMeter; //以目标设备每米的像素数来说明位图的水平分辨率LONG biYPelsPerMeter; //以目标设备每米的像素数来说明位图的垂直分辨率DWORD biClrUsed; /*颜色表的颜色数,若为0则位图使用由biBitCount 指定的最大颜色数*/DWORD biClrImportant; //重要颜色的数目,若该值为0则所有颜色都重要} BITMAPINFOHEADER;与DDB不同,DIB的字节数组是从图象的最下面一行开始的逐行向上存储的,也即等于把图象倒过来然后在逐行扫描。
另外,字节数组中每个扫描行的字节数必需是4的倍数,如果不足要用0补齐结构的定义DIB可以存储在*.BMP或*.DIB文件中。
DIB文件是以BITMAPFILEHEADER 结构开头的typedef struct tagBITMAPFILEHEADER {WORD bfType; //文件类型,必须为"BM"DWORD bfSize; //文件的大小WORD bfReserved1; //为0WORD bfReserved2; //为0DWORD bfOffBits; //存储的像素阵列相对于文件头的偏移量} BITMAPFILEHEADER;紧随该结构的是一个BITMAPINFOHEADER结构,然后是RGBQUAD结构组成的颜色表(如果有的话),文件最后存储的是DIB的像素阵列。
DIB的颜色信息储存在自己的颜色表中,程序一般要根据颜色表为DIB创建逻辑调色板。
在输出一幅DIB之前,程序应该将其逻辑调色板选入到相关的设备上下文中并实现到系统调色板中,然后再调用相关的GDI函数(如::SetDIBitsToDevice或::StretchDIBits)输出DIB。
在输出过程中,GDI 函数会把DIB转换成DDB,这项工作主要包括以下两步:将DIB的颜色格式转换成与输出设备相同的颜色格式。
例如,在真彩色的显示模式下要显示一个256色的DIB,则应该将其转换成24位的颜色格式。
将DIB像素的逻辑颜色索引转换成系统调色板索引。
编写DIB类由于MFC未提供DIB类,用户在使用DIB时将面临繁重的Windows API 编程任务。
幸运的是,Visual C++提供了一个较高层次的API,简化了DIB的使用。
这些API函数实际上是由MFC的DibLook例程提供的,它们位于DibLook目录下的dibapi.cpp、myfile.cpp和dibapi.h文件中,主要包括:ReadDIBFile //把DIB文件读入内存SaveDIB //把DIB保存到文件中CreateDIBPalette //从DIB中创建一个逻辑调色板PaintDIB //显示DIBDIBWidth //返回DIB的宽度DIBHeight //返回DIB的高度DIB区块DIB区块DIB能拥有几种色彩组织中的一种,DDB必须是单色的或是与真实输出设备相同的格式。
DIB是一个档案或记忆体块;DDB是GDI点阵图物件并由点阵图代号表示。
DIB能被显示或转换为DDB并转换回DIB,但是这里包含了装置无关位元和设备相关位元之间的转换程序。
现在您将遇到一个函式,它打破了这些规则。
该函式在32位元Windows 版本中发表,称为CreateDIBSection,语法为:hBitmap = CreateDIBSection (hdc, // device context handlepInfo, // pointer to DIB informationfClrUse, // color use flagppBits, // pointer to pointer variablehSection, // file-mapping object handledwOffset) ; // offset to bits in file-mapping objectCreateDIBSection是Windows API中最重要的函式之一(至少在使用点阵图时),然而您会发现它很深奥并难以理解。
DIB是什么让我们从它的名称开始,我们知道DIB是什么,但「DIB section」到底是什么呢?当您第一次检查CreateDIBSection时,可能会寻找该函式与DIB 区块工作的方式。
这是正确的,CreateDIBSection所做的就是建立了DIB的一部分(点阵图图素位元的记忆体块)。
现在我们看一下传回值,它是GDI点阵图物件的代号,这个传回值可能是该函式呼叫最会拐人的部分。
传回值似乎暗示著CreateDIBSection在功能上与CreateDIBitmap相同。
事实上,它只是相似但完全不同。
实际上,从CreateDIBSection传回的点阵图代号与我们在本章和上一章遇到的所有点阵图建立函式传回的点阵图代号在本质上不同。
一旦理解了CreateDIBSection的真实特性,您可能觉得奇怪为什么不把传回值定义得有所区别。
您也可能得出结论:CreateDIBSection应该称之为CreateDIBitmap,并且如同我前面所指出的CreateDIBitmap应该称之为CreateDDBitmap。
使用首先让我们检查一下如何简化CreateDIBSection,并正确地使用它。
首先,把最後两个参数hSection和dwOffset,分别设定为NULL和0。
第二,仅在fColorUse参数设定为DIB_ PAL_COLORS时,才使用hdc参数,如果fColorUse为DIB_RGB_COLORS(或0),hdc将被忽略(这与CreateDIBitmap 不同,hdc参数用於取得与DDB相容的设备的色彩格式)。
因此,CreateDIBSection最简单的形式仅需要第二和第四个参数。
第二个参数是指向BITMAPINFO结构的指标,我们以前曾使用过。
我希望指向第四个参数的指标定义的指标不会使您困惑,它实际上很简单。
假设要建立每图素24位元的384×256位元DIB,24位元格式不需要色彩对照表,因此它是最简单的,所以我们可以为BITMAPINFO参数使用BITMAPINFOHEADER结构。
您需要定义三个变数:BITMAPINFOHEADER结构、BYTE指标和点阵图代号:BITMAPINFOHEADER bmih ;BYTE * pBits ;HBITMAP hBitmap ;现在初始化BITMAPINFOHEADER结构的栏位bmih->biSize = sizeof (BITMAPINFOHEADER) ;bmih->biWidth = 384 ;bmih->biHeight = 256 ;bmih->biPlanes = 1 ;bmih->biBitCount = 24 ;bmih->biCompression = BI_RGB ;bmih->biSizeImage = 0 ;bmih->biXPelsPerMeter = 0 ;bmih->biYPelsPerMeter = 0 ;bmih->biClrUsed = 0 ;bmih->biClrImportant = 0 ;在基本准备後,我们呼叫该函式:hBitmap = CreateDIBSection (NULL, (BITMAPINFO *) &bmih, 0, &pBits, NULL, 0) ;注意我们为第二个参数赋予BITMAPINFOHEADER结构的位址。
这是常见的,但一个BYIE指标pBits的位址,就不常见了。
这样,第四个参数是函式需要的指向指标的指标。
这是函式呼叫所做的:CreateDIBSection检查BITMAPINFOHEADER结构并配置足够的记忆体块来载入DIB图素位元。
(在这个例子里,记忆体块的大小为384×256×3位元组。