① 如何将BMP格式的图片转化成GRF位图文件
BAT DOS下的批处理文件。Autoexec.bat为自动批处理文件,它是特殊的批处理文件。
EXE可执行的程序文件,与COM内部结构不相同,最突出是长度没有限制。
COM可执行的二进制代码系统程序文件,特点非常短小精焊,长度有限制。
ASM汇编程序文件为二进制代码文件,可以打个比方,它就像BASIC中的.BAS程序文件一样,为不可执行文件。
ASC代码文件。
BAK备份文件
LIB程序库文件
CHK检查磁盘命令CHKDSK发现的目录或文件分配表中的错误,校正系统后的文件。
TMP临时文件
SYS系统配置文件,最典型的如config.sys,一般可以用EDIT进行编辑。
OBJ目标文件,源程序编译输出的目标代码。
OLD备份文件,一般是一些程序对系统配置修改后将原文件复制一份存储为该文件格式。
INI配置文件,不要以为这个文件只有Windows程序需要,DOS下程序也有不少需要它,如3DS与AutoCAD。
INF安装配置文件,这在WIN95下使用较多。
HLP HELP帮助文件,这个文件一定要重视,因为它是你每使用一个新软件的最好的说明书,几乎99%的软件都有这个文件,另外,DOS下的一些帮助放在README以后,帮助便没有了,如UCDOS中的REAME.EXE;有单独DOS的命令,若不知道怎么使用,可以试试以下的命令格式:“DIR?或DIR/?”。
DDI早期映象文件,由DiskDUP IMGDRIVE IMG.EXE展开
IMG这个文件要注意,有时它是一个图象文件,但更多的时候,它是映象文件,在早期光盘上,此文件使用最多,能常用HD-COPY IMG UNIMG都软件进行解压(注:IMG这个软件为什么一闪就没了呢,这个软件需要热键激活,按下Ctrl+Alt+S+D+X),如果要安装的软件压缩文件由和几个IMG分开压缩,那最好用UNIMG将它们全部解压缩,然后安装,它安装时提示你“请插入X序列盘”。
ARJ ARJ(ARJ这个以前风眯一时的压缩软件谁人不晓)软件压缩的文件,它的压缩比较高,使用也特方便顺手,只需要“ARJ a -r -v……”
RAR这也是一个压缩文件,传说比ARJ压缩比更高,笔者没有亲手做试验,故不敢下空此结论。
ZIP当前最流行的压缩文件,谁不知道ZIP呀,WINZIP,再也不是DOS下的那个UNZIG或PKZIP了,兼容,向下兼容,从游戏到软件,差不多都是它压缩的了。
IMD UCDOS中输法的编码字典文件。
PDV UCDOS中的自由表格UCTAB生成的表格文件,它生成的文件可以被WPS调用,也挺方便的。
BAS BASIC中的源程序文件,BASIC可为初学者最为熟悉的编辑语言,它的优点笔者就不在累赘了,注意QBASIC与QUICK BASIC和GW BASIC是有区别。
C C语言中的源程序文件,它不但造就了我们常常为之日夜奋战的精彩电脑游戏,还创造出UNIX操作系统,有口皆碑的好编程软件。
MAK C语言中的工程文件。
COB COBOL语言源程序文件。
PAS PASCAL语言源程序文件。
FOR FORTRAN语言源程序文件。
FOX FOXBASE伪编译程序文件,比PRG短小运行速度快。
PRG FOXBASE过程程序文件。
DBF XBASE数据库文件。
IDX FOXBASE中的索引文件。
LBL FOXBASE中的标签文件。
FRM FOXBASE中的报表格式文件。
MEM FOXBASE中的内存变量文件。
FMT FOXBASE中的屏幕格式文件。
DBT FOXBASE中的数据库文件的辅助文件。
DBC为FOXPRO中的数据库名。
PJX Visual FoxPro下的项目文件与辅助文件PJT结合成项目管理管理文件。
RTF Rich的文本文件格式。
TXT纯文本文件格式,可以利用TYPE以及EDIT或者记事本等任何字处理程序打开,对它显示编辑。
WPS文档文件,是由着名国产软(WPS)(WORD PROCESSING SYSTEM)生成。由于WPS历经沧桑,经历了WPS1.0 2.2WPS30F WPSNT以及现在的WPS98众多版本,但是没有像WORD一样提供转换程序,一般高版本的WPS可以读出低版本的文件,对于低版本能不能读出高版本的文件,笔者没有一一做出试验,故不敢轻易下结论,只试验过UCDOS下的WPS读不出由WPSNT编辑的文件;另外对于WPS97的文件,你根本就不要用DOS版本去读,百分之百读出来,其实相互转换也不大困难,只要你在存盘时选择以TXT纯文本格式存盘也就不存在什么版本高低了。(WPS97中不要放图片)
%A%%B% WPS中的临时文件,注意清除OVL覆盖文件,如WPS.VOL1。
DOC文档文件,是由软件霸主Micrsoft Word生成,也有一部分是由WORD PERFECT生成,此文件也是版本众多有Wihdows下面的WORD5.0 6.0生成,还有WIN95下WORD7.0 WORD97,它们相互兼容性比较好,高版本可以轻松读取低版本文件,而且高版本也可以以低版本的格式进行存储,有人说WINDOWS中的书写器也能读出DOC,但笔者试验,读取WORD7.0以上的DOC都是一些乱码,而且格式里也注明只能读出DOS版的DOC。
PCS为POWERPOINT中的图象文件,为矢量图形文件。
XLS电子表格EXCEL的格式文件。
FNT为Bezier(贝氏)类型字体的文件。
TTF True Type字体文件,是一种轮廓字模,是由Apple和Microsoft合作开发的。Windows3.1下直接支持True Type字模。
FOT是True Type字体文件的资源文件,正因为FOT文件中含有指向TTF的指针。所以我们的字体文件(TTF)才可以放在任何目录下面,而不必提心系统找不到。
PFB Adobe TYPE1字体Post Script字模文件,必须使用Adobe Type Manager管理安装使用,它的最大优点是放大时比TTF字幕可靠得多。
PS1为WPS下扩展字库文件,PS2一般为繁体。
REC Windows中记录器中的宏命令文件。
CRD Windows中的卡版盒文件。
PIF Windows中的运行非WINDOWS应用程序建立的一个文件。
WRI文档文件,是由WINDOWS中书写器生成的。
DRV驱动程序文件。
VXD虚拟设备文件
GRP Windows程序组文件。
ANI WIN95中动画鼠标指针文件。
DLL Windows下应用程序中的动态连结库文件。
SCR WINDOWS屏幕保护程序文件
MP2 MP3当前最流行的音乐文件,音质可于CD音质媲美,采集率达44.1KHZ,由于它文件格式又非常小,需要一个叫WINAMP的软件和一个叫抓音轨的软件,如果通过声卡直接就能将录音带上的歌曲录制成WAV文件,再转化为MP3,播放时需要硬件配置不是太高。
SND在WIN95下同WAV文件图标大同小异,小喇叭的颜色是绿色,是声音文件的剪辑文件。
VOC VOC文件是随声卡一起诞生的一种常见数字声音文件,主要用于DOS程序(特别游戏),VOC与波形文件可方便转换。
WAV Windows所使用的标准数字音频文件,也称波形文件,它能够重现各种单声道或立体声的声音,是最常用的声音文件。
MID这个是音乐发烧友最熟悉不过的文件格式,是“乐器数字接口”(Musical lnstrument Digital interface)读作middy“迷笛”。mid文件最受人于睐的是占的空间小,与wav相比不是音乐采样,而是将每个音符记录为一个数字,mid标准规定了各种音调的混合及发音,通过输出装置可以将这些数字重新合成为音乐。它的缺点是有点太电子琴味。
RMI CMI CMF(Creative Music File)是mid几个变通格式,它们都同声卡一起诞生,现在一般很少,它们有些可以同mid相互转换,用CMF2MID小软件。
PCX是微机上使用最广泛的图像格式之一,能表现真彩图像。
BMP是Windows所使用的基本位图格式,是小画笔就能轻松创建的文件,另外提醒你BMP有压缩(RLE方法)和非压缩,我们常用是非压缩,bmp还有一个OS/2的版本,与Windows有区别。
GIF GIF在网页中占有独一无二的地位,美中不足是颜色最多为(256色)8位,与其它图象文件相比,GIF高人一招,它是唯一可以存储动画的图像格式。
PSD PDD位图文件,均为大名鼎鼎的图象大师Adobe Photoshop直接生成的图象文件。
CGM(Computer Graphics Metafile)是压缩的矢量图形文件,WINWORD可以打开。
HGL(HP Graphic Language)是HP公司创建的一种矢量图形语言。
WPG(DrawPerfect)矢量文件。
TIF最初用于扫描仪和桌面出版业,TIF程式图像可以是RGB真彩色的。
TGA位图文件,为Targa公司开发的支持8位到32位颜色深度图像文件,结构简单,少有变化,易转换。
VDA ICB VST与TGA相似,均为Targa公司开发的位图文件。
JPG JPE原是Apple Mac机器上使用的一种图像格式,现在意在PC机上大行其道,由于其压缩比可以调节,而且失真又很小,所以无论是网络上还是图像处理上都是使用很广泛的。
PIC同上,Lotus 1-2-3的图表文件也叫PIC文件,使用时请注意。
PCD是PhotoCD专用存储格式,由于其文件特别大,不得不存在CD-ROM上,但应用特别广。
EPS(Encapsulared postScrip)是Adobe System公司的PostScrip页面描述语言的产物,是矢量图形文件。
WMF (Windows MetaFile)是特殊文件,是位图和矢量图混血儿,桌面格式,可以在Windord与Offices组件中ClipArts最常用的格式可以在WinWord的DRAW中随意拆开编辑。
AI 矢量格式,是久负盛名的绘图软件Adobe lllustrator文件格式。
CDR矢量格式,是Corel Draw!标准文件格式。
CPT位图和矢量图都有,是Corel PHOTO-PAINT的文件格式。
CDT Corel Draw中的模板文件。
CMX Corel Draw展示交换文件。
CMV是Corel MOVE平面动画软件中的动画演示文件。
DXF矢量格式,CAD与3ds玩家可能都知道,是AutoCAD的绘图交换文件。
3DS矢量格式,为3D Studio的动画原始图形文件,含有纹理和光照信息。
SHP矢量格式3DS中的造型文件。
CEL 3DS中的贴图文件。
MLI 3DS中的材质库。
DRW矢量格式Micrografx Designer使用的绘图文件格式。
WPG矢量/格式,是Word Perfect使用的文件格式。
FLI动画文件,是由AutoDesk公司开发的,只支持320×200×256色模式,它是FLC的老祖宗。
FIC动画文件,是AutoDesk公司开发的,与FLI相比是青出于蓝胜于蓝的产物:文件的分辨率和颜色数都有所提高,它与FLI在Windows中播放需要专用MCI驱动和相应的播放程序APPlay。
MMM动画文件,是MacroMind公司着名多媒体写作软件Director生成的,一般集成在完整的应用程序中,单独出现的文件很少。
AVI视频与音频交错文件(Audio-Video lnter leaved音频-视频交错)它将视频音频交错混合在一起,AVI文件使用的压缩方法好几种,主要使用有损方法,压缩比较高,与FLC和MOV相比,画面质量不太好,在Windows下播放需要安装VIDEO For Windows驱动程序,AVI在多媒体中应用较多广,一般视频采集直接采集的素材便为AVI格式,编辑的它的软件也不少,如Video Pack Adobe Premiere,
MPG视频文件,PC机上的全屏幕活动视频的标准文件,采用MPEG方法进行压缩的全运动视频图像,可于1024×768的分辨率下每秒30帧速率播放128000种颜色和同步CD音质的伴音,是极为理想的视频影像文件
DAT视频影像文件,是Video CD(VCD)或Karaoke CD(卡拉OK CD)基于MPEG压缩方法的一种,注意它同数据文件同名
MOV视频影像,同样采用有损压缩方法,在Windows下必须安装QuickTime程序才能播放,它是从苹果机移植到PC上的,比AVI画面质量要好一些,其实你拿一个AVI文件做一下比较也就不难看出了。
HTM超文本文件,INTERNET网上访问WWW,是在HTM文件的的海洋里冲浪,对于超文本文件,说它是编程,可它也不像编程,现在要建立它,一点也不困难,有关的介绍满天飞,什么HOME PAGE,在WIN98中,OFFICES97都可以方便的创建生成。它还有一些名字叫主页、网,而且还与JAVA关系特密切。Microsoft IE导航者中与NETCAPE航海家都能游览它。
NO这个文件最重,要如SERIAL.NO,记事本、书写器、EDIT都可以打开,当你安装软件时,你可要一定先看看有这个文件没有,通常还有一种格式为(SN.TXT),它就是你安装软件是,你千找万寻的CD—KEY、产品序系号、注册登记号,有的软件更为阴险,安装时不要序列号,确在运行时向你发难了,不过现在不用怕了,这个文件一般放在安装程序第一个子目录中或光盘的根目录下,要是嫌其它文件鱼目混珠的话,用资源管理器搜索好了。
② 什么是BMP图片
BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。 [编辑本段]文件结构:典型的BMP图像文件由四部分组成:
1:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;
2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;
4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
位图的类型:
位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了。比如,它不能够存储(或者说获取)创建这张图片的原始设备的分辨率,这样,应用程序就不能快速的判断客户机的显示设备是否适合显示这张图片。为了解决这一难题,微软创建了DIB位图格式。
设备无关位图 (Device-Independent Bitmap)
DIB位图包含下列的颜色和尺寸信息:
* 原始设备(即创建图片的设备)的颜色格式。
* 原始设备的分辨率。
* 原始设备的调色板
* 一个位数组,由红、绿、蓝(RGB)三个值代表一个像素。
* 一个数组压缩标志,用于表明数据的压缩方案(如果需要的话)。
以上这些信息保存在BITMAPINFO结构中,该结构由BITMAPINFOHEADER结构和两个或更多个RGBQUAD结构所组成。BITMAPINFOHEADER结构所包含的成员表明了图像的尺寸、原始设备的颜色格式、以及数据压缩方案等信息。RGBQUAD结构标识了像素所用到的颜色数据。
DIB位图也有两种形式,即:底到上型DIB(bottom-up),和顶到下型DIB(top-down)。底到上型DIB的原点(origin)在图像的左下角,而顶到下型DIB的原点在图像的左上角。如果DIB的高度值(由BITMAPINFOHEADER结构中的biHeight成员标识)是一个正值,那么就表明这个DIB是一个底到上型DIB,如果高度值是一个负值,那么它就是一个顶到下型DIB。注意:顶到下型的DIB位图是不能被压缩的。
位图的颜色格式是通过颜色面板值(planes)和颜色位值(bitcount)计算得来的,颜色面板值永远是1,而颜色位值则可以是1、4、8、16、24、32其中的一个。如果它是1,则表示位图是一张单色位图(译者注:通常是黑白位图,只有黑和白两种颜色,当然它也可以是任意两种指定的颜色),如果它是4,则表示这是一张VGA位图,如果它是8、16、24、或是32,则表示该位图是其他设备所产生的位图。如果应用程序想获取当前显示设备(或打印机)的颜色位值(或称位深度),可调用API函数GetDeviceCaps(),并将第二个参数设为BITSPIXEL即可。
显示设备的分辨率是以每米多少个像素来表明的,应用程序可以通过以下三个步骤来获取显示设备或打印机的水平分辨率:
1. 调用GetDeviceCaps()函数,指定第二个参数为HORZRES。
2. 再次调用GetDeviceCaps()函数,指定第二个参数为HORZSIZE。
3. 用第一个返回值除以第二个返回值。即:DetDeviceCaps(hDC,HORZRES)/GetDeviceCaps(hDC,HORZSIZE);
应用程序也可以使用相同的三个步骤来获取设备的垂直分辨率,不同之处只是要将HORZRES替换为VERTRES,把HORZSIZE替换为VERTSIZE,即可。
调色板是被保存在一个RGBQUAD结构的数组中,该结构指出了每一种颜色的红、绿、蓝的分量值。位数组中的每一个索引都对应于一个调色板项(即一个RGBQUAD结构),应用程序将根据这种对应关系,将像素索引值转换为像素RGB值(真实的像素颜色)。应用程序也可以通过调用GetDeviceCaps()函数来获取当前显示设备的调色板尺寸(将该函数的第二个参数设为NUMCOLORS即可)。
Win32 API支持位数据的压缩(只对8位和4位的底到上型DIB位图)。压缩方法是采用运行长度编码方案(RLE),RLE使用两个字节来描述一个句法,第一个字节表示重复像素的个数,第二个字节表示重复像素的索引值。有关压缩位图的详细信息请参见对BITMAPINFOHEADER结构的解释。
应用程序可以从一个DDB位图创建出一个DIB位图,步骤是,先初始化一些必要的结构,然后再调用GetDIBits()函数。不过,有些显示设备有可能不支持这个函数,你可以通过调用GetDeviceCaps()函数来确定一下(GetDeviceCaps()函数在调用时指定RC_DI_BITMAP作为RASTERCAPS的标志)。
应用程序可以用DIB去设置显示设备上的像素(译者注:也就是显示DIB),方法是调用SetDIBitsToDevice()函数或调用StretchDIBits()函数。同样,有些显示设备也有可能不支持以上这两个函数,这时你可以指定RC_DIBTODEV作为RASTERCAPS标志,然后调用GetDeviceCaps()函数来判断该设备是否支持SetDIBitsToDevice()函数。也可以指定RC_STRETCHDIB作为RASTERCAPS标志来调用GetDeviceCaps()函数,来判断该设备是否支持StretchDIBits()函数。
如果应用程序只是要简单的显示一个已经存在的DIB位图,那么它只要调用SetDIBitsToDevice()函数就可以。比如一个电子表格软件,它可以打开一个图表文件,在窗口中简单的调用SetDIBitsToDevice()函数,将图形显示在窗口中。但如果应用程序要重复的绘制位图的话,则应该使用BitBlt()函数,因为BitBlt()函数的执行速度要比SetDIBitsToDevice()函数快很多。
设备相关位图 (Device-Dependent Bitmaps)
设备相关位图(DDB)之所以现在还被系统支持,只是为了兼容旧的Windows 3.0软件,如果程序员现在要开发一个与位图有关的程序,则应该尽量使用或生成DIB格式的位图。
DDB位图是被一个单个结构BITMAP所描述,这个结构的成员标明了该位图的宽度、高度、设备的颜色格式等信息。
DDB位图也有两种类型,即:可废弃的(discardable)DDB和不可废弃的(nondiscardable)DDB。可废弃的DDB位图就是一种当系统内存缺乏,并且该位图也没有被选入设备描述表(DC)的时候,系统就会把该DDB位图从内存中清除(即废弃)。不可废弃的DDB则是无论系统内存多少都不会被系统清除的DDB。API函数CreateDiscardableBitmap()函数可用于创建可废弃位图。而函数CreateBitmap()、CreateCompatibleBitmap()、和CreateBitmapIndirect()可用于创建不可废弃的位图。
应用程序可以通过一个DIB位图而创建一个DDB位图,只要先初始化一些必要的结构,然后再调用CreateDIBitmap()函数就可以。如果在调用该函数时指定了CBM_INIT标志,那么这一次调用就等价于先调用CreateCompatibleBitmap()创建当前设备格式的DDB位图,然后又调用SetDIBits()函数转换DIB格式到DDB格式。(可能有些设备并不支持SetDIBits()函数,你可以指定RC_DI_BITMAP作为RASTERCAPS的标志,然后调用GetDeviceCaps()函数来判断一下)。
对应的数据结构:
1:BMP文件组成
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
2:BMP文件头(14字节)
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
其结构定义如下:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 位图文件的类型,必须为BM(0-1字节)
DWORD bfSize; // 位图文件的大小,以字节为单位(2-5字节)
WORD bfReserved1; // 位图文件保留字,必须为0(6-7字节)
WORD bfReserved2; // 位图文件保留字,必须为0(8-9字节)
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图(10-13字节)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
3:位图信息头(40字节)
BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 本结构所占用字节数(14-17字节)
LONG biWidth; // 位图的宽度,以像素为单位(18-21字节)
LONG biHeight; // 位图的高度,以像素为单位(22-25字节)
WORD biPlanes; // 目标设备的级别,必须为1(26-27字节)
WORD biBitCount;// 每个像素所需的位数,必须是1(双色),(28-29字节)
// 4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),(30-33字节)
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位(34-37字节)
LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数(38-41字节)
LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数(42-45字节)
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数(46-49字节)
DWORD biClrImportant;// 位图显示过程中重要的颜色数(50-53字节)
} BITMAPINFOHEADER;
4:颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue;// 蓝色的亮度(值范围为0-255)
BYTE rgbGreen; // 绿色的亮度(值范围为0-255)
BYTE rgbRed; // 红色的亮度(值范围为0-255)
BYTE rgbReserved;// 保留,必须为0
} RGBQUAD;
颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
当biBitCount=1,4,8时,分别有2,16,256个表项;
当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 位图信息头
RGBQUAD bmiColors[1]; // 颜色表
} BITMAPINFO;
5:位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:
当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节;
Windows规定一个扫描行所占的字节数必须是
4的倍数(即以long为单位),不足的以0填充,
biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) * bi.biHeight;
具体数据举例:
如某BMP文件开头:
4D42 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 .... ....
BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。
一、图像文件头
1)1:(这里的数字代表的是"字",即两个字节,下同)图像文件头。0x4D42=’BM’,表示是Windows支持的BMP格式。
2)2-3:整个文件大小。4690 0000,为00009046h=36934。
3)4-5:保留,必须设置为0。
4)6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。
二、位图信息头
5)8-9:位图图信息头长度。
6)10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。
7)12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。
8)14:位图的位面数,该值总是1。0100,为0001h=1。
9)15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。1000为0010h=16。
10)16-17:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。
11)18-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于(≥位图宽度的最小的4的倍数)×位图高度×每个像素位数。0090 0000为00009000h=80×90×2h=36864。
12)20-21:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。
13)22-23:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。
14)24-25:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。
15)26-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。
三、彩色板
16)28-....(不确定):彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值:
1字节用于蓝色分量
1字节用于绿色分量
1字节用于红色分量
1字节用于填充符(设置为0)
对于24-位真彩色图像就不使用彩色板,因为位图中的RGB值就代表了每个象素的颜色。
如,彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
00FB 0000为FB00h=1111100000000000(二进制),是蓝色分量的掩码。
E007 0000为 07E0h=0000011111100000(二进制),是绿色分量的掩码。
1F00 0000为001Fh=0000000000011111(二进制),是红色分量的掩码。
0000 0000总设置为0。
将掩码跟像素值进行“与”运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。
四、图像数据阵列
17)27(无调色板)-...:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。
五、存储算法
BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。例如,一个800×600的24位几乎占据1.4MB空间。因此它们通常不适合在因特网或者其它低速或者有容量限制的媒介上进行传输。 根据颜色深度的不同,图像上的一个像素可以用一个或者多个字节表示,它由n/8所确定(n是位深度,1字节包含8个数据位)。图片浏览器等基于字节的ASCII值计算像素的颜色,然后从调色板中读出相应的值。更为详细的信息请参阅下面关于位图文件的部分。 n位2n种颜色的位图近似字节数可以用下面的公式计算: BMP文件大小约等于 54+4*2的n次方+(w*h*n)/8,其中高度和宽度都是像素数。 需要注意的是上面公式中的54是位图文件的文件头,是彩色调色板的大小。另外需要注意的是这是一个近似值,对于n位的位图图像来说,尽管可能有最多2n中颜色,一个特定的图像可能并不会使用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于。 如果想知道这些值是如何得到的,请参考下面文件格式的部分。 由于存储算法本身决定的因素,根据几个图像参数的不同计算出的大小与实际的文件大小将会有一些细小的差别。
③ BMP、JPEG、GIF、PNG各用什么压缩编码
Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它不支持文件压缩,也不适用于 Web 页。从总体上看,Windows 位图文件格式的缺点超过了它的优点。为了保证照片图像的质量,请使用 PNG 文件、JPEG 文件或 TIFF 文件。BMP 文件适用于 Windows 中的墙纸。 优点: BMP 支持 1 位到 24 位颜色深度。BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。 缺点: BMP 不支持压缩,这会造成文件非常大。BMP 文件不受 Web 浏览器支持。 PCX:PC 画笔 “PC 画笔”图片(也被称为 Z-Soft 位图)会以任何颜色深度存储单个光栅图像。画笔图片更广泛地用于较早的 Windows 程序和基于 MS-DOS 的程序。画笔图片与许多较新的程序兼容。PCX 图片支持“行程长度编码”(RLE) 内部压缩。 优点: PCX 在许多基于 Windows 的程序和基于 MS-DOS 的程序间是标准格式。PCX 支持内部压缩。 缺点:PCX 不受 Web 浏览器支持。 PNG:可移植网络图形 PNG 图片以任何颜色深度存储单个光栅图像。PNG 是与平台无关的格式。 优点: PNG 支持高级别无损耗压缩。PNG 支持 alpha 通道透明度。PNG 支持伽玛校正。 PNG 支持交错。PNG 受最新的 Web 浏览器支持。 缺点: 较旧的浏览器和程序可能不支持 PNG 文件。作为 Internet 文件格式,与 JPEG 的有损耗压缩相比,PNG 提供的压缩量较少。作为 Internet 文件格式,PNG 对多图像文件或动画文件不提供任何支持。GIF 格式支持多图像文件和动画文件。 JPEG:联合摄影专家组 JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。渐近式 JPEG 文件支持交错。可以提高或降低 JPEG 文件压缩的级别。但是,文件大小是以图像质量为代价的。压缩比率可以高达 100:1。(JPEG 格式可在 10:1 到 20:1 的比率下轻松地压缩文件,而图片质量不会下降。)JPEG 压缩可以很好地处理写实摄影作品。但是,对于颜色较少、对比级别强烈、实心边框或纯色区域大的较简单的作品,JPEG 压缩无法提供理想的结果。有时,压缩比率会低到 5:1,严重损失了图片完整性。这一损失产生的原因是,JPEG 压缩方案可以很好地压缩类似的色调,但是 JPEG 压缩方案不能很好地处理亮度的强烈差异或处理纯色区域。 优点: 摄影作品或写实作品支持高级压缩。利用可变的压缩比可以控制文件大小。支持交错(对于渐近式 JPEG 文件)。JPEG 广泛支持 Internet 标准。 缺点:有损耗压缩会使原始图片数据质量下降。当您编辑和重新保存 JPEG 文件时,JPEG 会混合原始图片数据的质量下降。这种下降是累积性的。JPEG 不适用于所含颜色很少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片。 GIF:图形交换格式 GIF 图片以 8 位颜色或 256 色存储单个光栅图像数据或多个光栅图像数据。GIF 图片支持透明度、压缩、交错和多图像图片(动画 GIF)。GIF 透明度不是 alpha 通道透明度,不能支持半透明效果。GIF 压缩是 LZW 压缩,压缩比大概为 3:1。GIF 文件规范的 GIF89a 版本中支持动画 GIF。 优点: GIF 广泛支持 Internet 标准。支持无损耗压缩和透明度。动画 GIF 很流行,易于使用许多 GIF 动画程序创建。 缺点:GIF 只支持 256 色调色板,因此,详细的图片和写实摄影图像会丢失颜色信息,而看起来却是经过调色的。 ·在大多数情况下,无损耗压缩效果不如 JPEG 格式或 PNG 格式。�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2
④ 请教关于BMP位图文件的压缩算法,所有的分都给你们了!
由于24位位图中使用三个字节(RGB)来表示一个像素的颜色,因此,BMP文件这就要求我们必须对该内容进行实时高效地压缩。以下是使用DEBUG工具获得的BMP
⑤ PS保存为BMP 8位时,勾选了RLE压缩,为什么属性里变32位的了
在系统设置或者压缩上设置后就可以 文件不允许大,你可以存为的时候可以改为小文件,这样会缩小
⑥ BMP文件的编码方式
BMP是一种与硬件设备无关的图像文件格式,也是我们最常在PC机上的Windows系统下见到的标准位图格式,使用范围很广泛。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。它最大的好处就是能被大多数软件“接受”,可称为通用格式。
BMP在过去是比较普及的图像格式,现在BMP(Window位图)图像主要被用在PC机运行Window时的墙纸。BMP可以提供无损压缩,压缩方式叫RLE(游程长度编码的编写),在创建墙纸图像文件时是一个极好的选项。Window有时在查找以RLE压缩文件方式保存的墙纸图像时也会出现识别错误。,因此使用时最好先关闭RLE压缩功能。
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
1、 BMP文件头:BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
typedef struct tagBITMAPFILEHEADER{
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
2、 位图信息头:BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 本结构所占用字节数
LONGbiWidth; // 位图的宽度,以像素为单位
LONGbiHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount// 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数
LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
DWORD biClrImportant;// 位图显示过程中重要的颜色数
} BITMAPINFOHEADER;
3、 颜色表:颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。
typedef struct tagRGBQUAD {
BYTE rgbBlue;// 蓝色的亮度(值范围为0-255)
BYTE rgbGreen; // 绿色的亮度(值范围为0-255)
BYTE rgbRed; // 红色的亮度(值范围为0-255)
BYTE rgbReserved;// 保留,必须为0
} RGBQUAD;
颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
当biBitCount=1,4,8时,分别有2,16,256个表项;
当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 位图信息头
RGBQUAD bmiColors[1]; // 颜色表
} BITMAPINFO;
4、 位图数据:位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:
当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节;
Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,
一个扫描行所占的字节数计算方法:
DataSizePerLine= (biWidth* biBitCount+31)/8; // 一个扫描行所占的字节数
DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数
位图数据的大小(不压缩情况下):
DataSize= DataSizePerLine* biHeight;
二、BMP文件分析
1、 工具软件:Hex Workshop 或 UltraEdit
2、 分析:首先请注意所有的数值在存储上都是按"高位放高位、低位放低位的原则",如12345678h放在存储器中就是7856 3412)。下图是一张图16进制数据,以此为例进行分析。在分析中为了简化叙述,以一个字(两个字节为单位,如424D就是一个字)为序号单位进行,"h"表示是16进制数。
424D 4690 0000 0000 0000 4600 0000 2800
0000 8000 0000 9000 0000 0100 1000 0300
0000 0090 0000 A00F 0000 A00F 0000 0000
0000 0000 0000 00F8 0000 E007 0000 1F00
0000 0000 0000 02F1 84F1 04F1 84F1 84F1
06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2
1:图像文件头。424Dh='BM',表示是Windows支持的BMP格式。
2-3:整个文件大小。4690 0000,为00009046h=36934。
4-5:保留,必须设置为0。
6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。
8-9:位图图信息头长度。
10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。
12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。
14:位图的位面数,该值总是1。0100,为0001h=1。
15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。T408支持的是16位格式。1000为0010h=16。
16-17:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩),3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。
18-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于位图宽度×位图高度×每个像素位数。0090 0000为00009000h=80×90×2h=36864。
20-21:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。
22-23:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。
2:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。
26-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。
28-35:彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值:
1字节用于蓝色分量
1字节用于绿色分量
1字节用于红色分量
1字节用于填充符(设置为0)
对于24-位真彩色图像就不使用彩色表,因为位图中的RGB值就代表了每个象素的颜色。但是16位r5g6b5位域彩色图像需要彩色表,看前面的图,与上面的解释不太对得上,应以下面的解释为准。
图中彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
00FB 0000为FB00h=1111100000000000(二进制),是红色分量的掩码。
E007 0000为 07E0h=0000011111100000(二进制),是绿色分量的掩码。
1F00 0000为001Fh=0000000000011111(二进制),是红色分量的掩码。
0000 0000总设置为0。
将掩码跟像素值进行"与"运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。
另外,用ultraedit可查看几乎所有文件的二进制代码,
⑦ 请大家帮我讲解讲解:BMP位图文件的结构
BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。 典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。 BMP图像,即通常所说的位图(Bitmap),是Windows系统中最为常见的图像格式。Windows 3.0以前的版本只支持与设备相关位图DDB(Device Dependent Bitmap)。DDB是一种内部位图格式,它显示的图像依计算机显示系统的设置不同而不同,因此一般不存储为文件,与通常所说的BMP图像不同。在Windows.h中,结构体BITMAP定义了DDB位图的类型、宽度、高度、颜色格式和像素位值等,代码如下:typedef struct tagBITMAP { int bmType; //位图类型,必须设为0 int bmWidth; //位图宽度 int bmHeight; //位图高度 int bmWidthBytes; //位图中每一扫描行中的字节数 BYTE bmPlanes; //颜色层数 BYTE bmBitsPixel; //每一像素所占的位数 void FAR* bmBits; //存放像素值内存块的地址 }BITMAP; DDB中不包括颜色信息,显示时是以系统的调色板为基础进行像素的颜色映射的。Windows只能保证系统调色板的前20种颜色稳定不变,所以DDB只能保证正确显示少于20色的位图。Windows SDK提供标准的DDB位图操作函数;MFC中定义了CBitmap类来说明DDB位图,其中封装了与DDB位图操作相关的数据结构和函数。 Windows 3.1以上版本提供了对设备无关位图DIB(Device Independent Bitmap)的支持。DIB位图可以在不同的机器或系统中显示位图所固有的图像。相对于DDB而言,DIB是一种外部位图格式,经常存储为常见的以BMP为后缀的位图文件(有时也以DIB为后缀)。因此,通常所说的BMP图像,即是DIB位图。 BMP位图文件包括4部分,即位图文件头结构BITMAPFILEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据,BMP位图文件的结构如图下。 位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER位图颜色表RGBQUAD位图像素数据下面介绍BMP文件头、BMP位图信息头、颜色表这3个结构体在Windows.h中的定义如下: 1. BMP文件头BMP文件头含有BMP文件的类型、文件的大小、位图文件的保留字、位图数据距文件头的偏移量等信息。定义如下: typedef struct tagBITMAPFILEHEADER { UINT bfType; //位图文件的类型,必须为BM DWORD bfSize; //位图文件的大小,以字节为单位 UINT bfReserved1; //位图文件保留字,必须为0 UINT bfReserved2; //位图文件保留字,必须为0 DWORD bfOffBits; //位图数据距文件头的偏移量,以字节为单位 } BITMAPFILEHEADER; 2. BMP位图信息头BMP位图信息头用于说明位图的尺寸等信息,定义如下: typedef struct tagBIMAPINFOHEADER { DWORD biSize; //本结构所占用字节数 LONG biWidth; //位图的宽度,以像素为单位 LONG biHeight; //位图的高度,以像素为单位 WORD biPlanes; //目标设备的级别,必须为1 WORD biBitCount; //每个像素所需的位数,必须是1(双色)、 //4(16色)、8(256色)或24(真彩色)之一 DWORD biCompression; //位图压缩类型,必须是 0(不压缩)、 //1(BI_RLE8压缩类型)或2(BI_RLE压缩类型)之一 DWORD biSizeImage; //位图的大小,以字节为单位 LONG biXPelsPerMeter; //位图水平分辨率,每米像素数 LONG biYPelsPerMeter; //位图垂直分辨率,每米像素数 DWORD biClrUsed; //位图实际使用的颜色表中的颜色数 DWORD biClrImportant; //位图显示过程中重要的颜色数 } BITMAPINFOHEADER; 3. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,且定义一种颜色,定义如下: typedef struct tagRGBQUAD { BYTE rgbBlue; //蓝色的亮度(值范围为0~255) BYTE rgbGreen; //绿色的亮度(值范围为0~255) BYTE rgbRed; //红色的亮度(值范围为0~255) BYTE rgbReserved; //保留,必须为0 } RGBQUAD; 位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[i]; } BITMAPINFO; 颜色表中RGBQUAD结构数据的个数由biBitCount来确定,当biBitCount=1、4、8时,分别有2、16、256个表项;当biBitCount=24时,没有颜色表项。 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内从左到右、扫描行之间从下到上。位图的一个像素值所占的字节数如下: l 当biBitCount=1时,8个像素占1个字节。 l 当biBitCount=4时,2个像素占1个字节。 l 当biBitCount=8时,1个像素占1个字节。 l 当biBitCount=24时,1个像素占3个字节。 Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,一个扫描行所占的字节数计算方法如下: DataSizePerLine=(biWidth×biBitCount+31)/8 这是本设计中的一个关键点,无论对图像进行何种变换,都要进行扫描行的4字节对齐。 除了上述的Windows BMP以外,还有一种与其结构相似,但不完全相同的另一种BMP图像,即OS/2采用的BMP。其与Windows BMP的主要区别是位图信息结构(信息头结构和颜色表结构)不同。而它们的图像位数据的存储方式是完全一样的。本设计只讨论Windows系统下的BMP图像,故对OS/2使用的BMP不进行详细分析。
⑧ photoshop 保存bmp 为什么不支持rle压缩,选项是灰色的
RLE只能对8bit 256色的图像压缩