位图文件结构

合集下载

PNG文件结构分析

PNG文件结构分析

PNG文件结构分析PNG(Portable Network Graphics)是一种无损压缩的位图图形文件格式。

下面将对PNG文件的结构进行详细分析。

1.PNG文件头(8个字节):2.IHDR块(13个字节):IHDR(Image Header)块是PNG文件中的第一个关键块,用于描述图像的基本属性和信息。

IHDR块长度为13个字节,包括:-宽度(4个字节):用于表示图像的宽度,以像素为单位。

-高度(4个字节):用于表示图像的高度,以像素为单位。

-位深度(1个字节):用于表示每个颜色通道的位数,常见的值为8或16- 颜色类型(1个字节):用于表示图像的颜色类型,包括灰度图(0),真彩图(2),索引彩色图(3),灰度图+Alpha通道(4),真彩图+Alpha通道(6)。

- 压缩方法(1个字节):用于表示图像的压缩方法,PNG只支持Deflate(0)方法。

- 滤波方法(1个字节):用于表示图像的滤波方法,PNG只支持Adaptive(0)方法。

-插值方法(1个字节):用于表示图像的插值方法,PNG只支持非渐进式插值(0)方法。

3.数据块:数据块是PNG文件中存储实际图像数据的部分。

数据块依次出现,直到出现以IEND(Image End)为标识的数据块,表示图像数据的结束。

常见的数据块包括:- IDAT(Image Data)块:存储图像的实际像素数据。

由于PNG是无损压缩格式,数据块内使用Deflate算法进行压缩。

- PLTE(Palette)块:仅在颜色类型为索引彩色图时出现,用于存储调色板的颜色数据。

- tRNS(Transparency)块:用于存储透明度信息,例如对于索引彩色图像,可以用tRNS块指定透明颜色索引。

- pHYs(Physical Pixel Dimensions)块:用于描述图像的物理尺寸和像素比例因子。

- tIME(Time Stamp)块:用于存储图像的修改时间信息。

BMP图象格式

BMP图象格式
然而,未压缩的图像信息区的大小。除了真彩色模式外,其余的均大于或等于数据信息的大小。这是为什么呢?原因有两个:
1.BMP文件记录一行图像是以字节为单位的。因此,就不存在一个字节中的数据位信息表示的点在不同的两行中。也就是说,设显示模式位16色,在每个字节分配两个点信息时,如果图像的宽度位奇数,那么最后一个像素点的信息将独占一个字节,这个字节的后4位将没有意义。接下来的一个字节将开始记录下一行的信息。
2.图像描述信息块
000E-0011:图像描述信息块的大小,常为28H。
0012-0015:图像宽度。
0016-0019:图像高度。
001A-001B:图像的plane总数(恒为1)。
001C-001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。
001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。
BMP图象格式
MP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。在系统中以BMP为扩展名保存。
打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。这是最普通的生成位图的工具,在这里讲解的BMP位图形式,主要就是指用画图生成的位图(当然,也可以用其它工具软件生成)。
1 dword
位图的宽度,以象素为单位
0016h
Height
1 dword
位图的高度,以象素为单位
001Ah
Planes
1 word
位图的位面数(注:该值将总是1)
图象
信息

24位位图解析

24位位图解析

我所要介绍的是24位真彩色位图文件的结构。

一个24位真彩色位图文件包括以下三个部分:位图文件头、位图信息头和颜色数据域,这都是我自己起的名字,不知是否与经典有出入,大家应该能够意会。

首先说说位图文件头。

就目前来看我所见到过的位图文件头都位于位图文件的最前部,长都是14个字节,例如有这样一个位图文件(用16位编辑器打开浏览时的效果):那么在第0行从左向右的前14个字节(红色部分)属于位图文件头,各个字节的意义是这样的:42 4D:看作ASCII码,对应的字母为‘BM’,即表示该文件是位图文件;86 00 00 00:四个字节用于表示改为图文件的大小尺寸,要注意的是它们是按低位到高位排列的,那么可以看出整个位图文件的尺寸是0x00000086字节,即134字节。

不难得知,这四个字节最大可以表示4,294,967,296,即可以表示4GB的位图大小;00 00 00 00:查资料知道,这4个字节是保留位,用于存储文件大小的数据。

而我没有找到超过4G的位图,因此不知道这四个自己究竟如何使用。

不过可以推测可能是用跟前面4字节共64 bit来表示文件的大小。

FAT32文件系统下不支持超过4GB的文件,NTFS系统支持;36 00 00 00:也是按从低位到高位排列的,用于表示改位图颜色数据域相对文件开始处的偏移量,可以看到这个位图的颜色数据域是从0x00000036字节处开始的(这里有点想不通,既然前面要用8个字节表示文件大小,为什么这里的偏移量只有4字节?)。

以上就是位图文件头的情况,接下来是位图信息头,仍旧观察前面的位图,从第一行E序字节的28开始(蓝色部分)共40字节,各个字节的含义是:28 00 00 00:表示信息头的长度,0x00000028=40,即位图信息头占40个字节;05 00 00 00:表示位图宽度,单位为像素。

即位图的宽度为5个像素;05 00 00 00:表示位图高度,单位为像素。

BMP24位位图格式总结

BMP24位位图格式总结

图像BMP24位位图格式总结1、创建图片创建一张只有六个像素的图片(两行三列),每个像素的颜色RGB组合值如图1(示意图)所示:图12、windows系统下存储格式(使用WinHex打开)3、文件结构3.1 文件头(bmp file header),提供文件的格式、大小等信息,共14个字节,如图2所示。

图23.1.1 0-1字节(2个字节)0x42 0x4d = "BM",表示这是Windows支持的位图格式,如图3所示。

图33.1.2 2-5字节(4个字节),表示该bmp文件的大小,存储形式为图4所示,因为小端对齐形式存储,实际存储的16进制数为0x4e,转换为十进制为78,与我们直接查看此图片的属性所看到的文件大小一致。

注:对于arm,intel这种x86架构的复杂指令CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐,但对于unix服务器的CPU,更多是采用大端对齐的情况图43.1.3 6-9字节这是两个保留段,为0如图5所示。

图53.1.4 A-D字节如图6所示,存储数据为0x36,十进制为54,表示的意义为从文件头到位图数据需偏移54字节。

图63.2 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息,40个字节,如图7所示。

图73.2.1 0E-11字节,如图8所示,存储数据为0x28,十进制为40,表示意义为:位图信息头的大小为40个字节。

图83.2.2 12-15字节,如图9所示,存储数据为0x03,十进制为3,表示意义为:图像宽为3个像素,与我们创建的图像一致。

图93.2.3 16-19字节,如图10所示,存储数据为0x02,十进制为2,表示意义为:图像高为2个像素,与我们创建的图像一致。

图103.2.4 1A-1B字节,如图11所示,存储数据为0x01,该值总为1,表示意义为位元面数。

bmp文件格式详解

bmp文件格式详解

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文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据”。

BMP格式结构详解

BMP格式结构详解

BMP格式结构详解位图文件(B it m a p-File,BMP)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。

Windows 3.0以前的BMP位图文件格式与显示设备有关,因此把它称为设备相关位图(d evice-d ependent b itmap,DDB)文件格式。

Windows 3.0以后的BMP位图文件格式与显示设备无关,因此把这种BMP位图文件格式称为设备无关位图(d evice-i ndependent b itmap,DIB)格式,目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。

BMP位图文件默认的文件扩展名是BMP或者bmp。

6.1.2 文件结构位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它们的名称和符号如表6-01所示。

表6-01 BMP图像文件组成部分的名称和符号位图文件结构可综合在表6-02中。

表6-02 位图文件结构内容摘要6.1.3 构件详解1. 位图文件头位图文件头包含有关于文件类型、文件大小、存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:typedef struct tagBITMAPFILEHEADER { /* bmfh */UINT bfType;DWORD bfSize;UINT bfReserved1;UINT bfReserved2;DWORD bfOffBits;} BITMAPFILEHEADER;其中:bfType 说明文件的类型.bfSize 说明文件的大小,用字节为单位bfReserved1 保留,设置为0bfReserved2 保留,设置为0bfOffBits 说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字节偏移量2. 位图信息头位图信息用BITMAPINFO结构来定义,它由位图信息头(bitmap-information header)和彩色表(color table)组成,前者用BITMAPINFOHEADER结构定义,后者用RGBQUAD结构定义。

位图常见的格式

位图常见的格式

位图常见的格式位图图像(BitmapImage)是一种由矢量图像转换而成的用来在计算机屏幕上显示静态图像的格式。

位图图像可以存储为不同的文件格式,其中最常见的格式包括BMP,GIF,JPEG,PCX,PNG,TIFF等。

这些文件格式有一些共同的特征,也有一些不同的特征。

BMP(bits-per-pixel)文件格式是最常见的位图图像格式。

该格式的特征是每一个像素都可以被描述为精确的位深度,即每一个像素点都可以用计算机中的位来表示。

不同的BMP文件一般有不同的位深度,如1位、4位、8位、24位等。

BMP文件格式支持多种色彩系统,如调色板(Palette)、RGB(Red、Green、Blue)等。

GIF(Graphic Interchange Format)文件格式是一种可以存储256个调色板颜色索引的图像文件格式。

GIF是一种使用LZW (Lempel-Ziv-Welch)算法进行压缩的图像文件格式,因此其文件大小一般较小,这使其在网络上传播和保存上具有优势。

GIF文件格式一般用于制作简单的动画效果,使其在网站页面上产生点缀效果。

JPEG(Joint Photographic Experts Group)文件格式是图像文件格式中最流行的一种,它可以存储将近16.7万色彩索引,它可以将一幅图像压缩到更小的文件大小,这使其在网络上传播十分方便。

JPEG文件格式可以在没有失真的情况下压缩至一半左右的图像大小,这使得它在商业上得到广泛应用。

PCX(Paintbrush eXchange)文件格式是一种常见的网络上传播的图像文件格式。

它的特征在于文件存储的是位图像素,分辨率可以达到640×480,而且可以存储256色彩索引的调色板,它支持使用调色板和RGB模式进行调色。

PNG(Portable Network Graphics)文件格式是一种新的图像文件格式,它可以支持24位位图像素,它可以完美地模拟出彩色图像。

图形图像文件格式

图形图像文件格式

图形图像文件格式简介图形图像文件格式是指用于存储和传输图形和图像数据的文件格式。

不同的文件格式采用不同的编码方式和压缩算法,以适应不同的应用场景和设备要求。

本文将介绍常见的图形图像文件格式及其特点。

一、位图格式1. BMP(Bitmap)BMP是一种无压缩的位图格式,采用像素点的颜色数据来表示图像。

它的优点是图像质量高,颜色准确,可广泛应用于图像编辑和打印等应用。

然而,BMP文件体积较大,占用存储空间较多。

2. GIF(Graphics Interchange Format)GIF是一种采用LZW压缩算法的位图格式,支持多帧图像和透明色。

由于GIF文件体积较小,支持动画效果和简单的透明效果,常用于网络上的图像传输。

然而,GIF只支持256色调色板,不适合存储真彩色图像。

3. JPEG(Joint Photographic Experts Group)JPEG是一种广泛应用的有损压缩图像格式,通过牺牲一定的图像质量来降低文件体积。

JPEG文件支持16.7百万种颜色,适合存储照片和复杂图像。

JPEG还支持渐进式加载,可通过多个扫描逐渐显示图像,提升用户体验。

4. PNG(Portable Network Graphics)PNG是一种无损压缩图像格式,具有高压缩比和无损失的图像质量。

PNG支持全局颜色表、透明色和支持Alpha通道的透明效果,适用于图像编辑和网络图像传输。

然而,PNG文件的压缩时间较长,不适合实时图像压缩。

二、矢量格式1. SVG(Scalable Vector Graphics)SVG是一种基于XML描述的矢量图形格式,使用数学公式定义图形,可无损放缩。

由于SVG图形是基于矢量点和线定义的,因此可以无损放大缩小而不失真。

SVG文件可以在不同分辨率的设备上显示,适用于Web应用和图形设计。

2. AI(Adobe Illustrator)AI是Adobe Illustrator软件的专用矢量图形格式,支持层级编辑和多种效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

位图文件结构
1.位图文件头(BITMAPFILEHEADER):14字节
typedef struct tagBITMAPGILEHEADER{
WORD bfType; //值为0x4d42
DWORD bfSize; //位图文件的大小
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMATPFILEHEADER;
2.位图信息:
typedef struct tagBITMAPINFO{
BITMAPINFOHEADER bmiHeader; //位图信息头
RGBQUAD bmiColors; //颜色表
} BITMAPINFO;
1)位图信息头:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //位图信息头的字节数sizeof(BITMAPINFOHEADER)
LONG biWidth; //以像素为单位的图像宽度
LONG biHeight; //以像素为单位的图像长度
WORD biPlanes; //目标设备的位平面数
WORD biBitCount; //每个像素的位数【1】
DWORD biCompression; //图像的压缩格式(这个值几乎总是为0)
DWORD biSizeImage; //以字节为单位的图像数据的大小
LONG biXpelsPerMeter; //水平方向上的每米的像素个数
LONG biYpelsPerMeter; //垂直方向上的每米的像素个数
DWORD biClrUsed; //调色板中实际使用的颜色数,通常为0
DWORD biClrImportant; //实现位图时必须的颜色数,通常为0
} BITMAPINFOHEADER;
【1】每个像素的位数
0,用在JPEG格式中
1,单色图,调色板中含有两种颜色,也就是我们通常说的黑白图片
4,16色图
8,256色图,通常说的灰度图
16,64K图,一般没有调色板,图像数据中每两个字节表示一个图像,5个或6个位表示一个RGB分量
24,16M真彩色图,一般没有调色板,图像数据中每3个字节表示一个像素,每个字节表示一个RGB分量
32,4G真彩色,一般没有调色板,每4个字节表示一个像素,相对24位真彩图而言,加入了一个透明度,即RGBA模式
2)颜色表:
针对16位以下的图像而设置的。

对于16位以下的图像,由于其位图像素数据中记
录的只是调色板索引值,因而需要根据这个索引到调色板去取得相应的RGB颜色。

typedef struct tagRGBQUAD{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
3.位图像素数据:
误差扩散
误差扩散法于1975年由Floid和Steinberg提出。

基本算法是:
设:被加网图像的灰度级G0的范围为:0至G MAX,灰度值0表示黑,G MAX表示白。

用G0/G MAX 将将灰度范围转换为0至1.0。

取灰度中间值作为阈值T,即:T=0.5。

用原图像某像素的灰度值G与阈值T比较,如果G>=T,则将该像素置为“白”(1.0),所产生的误差E为:E=G-1.0
如果G<T,则将该二值像素置为“黑”(0),所产生的误差E为G。

将所产生的误差向灰度图像当前像素的周围4个像素扩散(叠加),扩散的比例:
误差扩散的行列顺序是逐行倒向的,即:左向右处理到一行右端末尾,接着下一行从右向左进行处理,直至所有行全部处理完毕。

针对原始的误差扩散法的一些缺点,人们提出了多种修正算法,如:改变误差扩散比例系数和像素范围、为误差扩散系数加入随机噪声(蓝噪声法)、按空间填充曲线顺序进行误差扩散、针对不同阶调采用不同扩散系数等。

相关文档
最新文档