工作中用到图片,故将格式搜集整理在这里,以备以后使用时查看。。。
图片格式有很多中这类暂时只整理几种常见的格式:bmp,jpeg,png,gif...
一、bmp图像格式
BMP是一种与硬件设备无关(在windows3.0后是设备无关位图格式DDB;在windows3.0之前是设备相关位图格式DIB;)的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
  BMP 是 Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像。Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它不支持文件压缩,由于BMP文件所占用的空间很大故不适用于 Web 页。
  优点:BMP 支持 1 位到 24 位颜色深度。BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。在嵌入式中可以不用转换而直接写显存,避免了转换的时间,但占用了较大的存储空间。
缺点: BMP 不支持压缩,这会造成文件非常大,占用存储空间。
 典型的BMP图像文件由四部分组成:
  1:bitmap file header 位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
  2:bitmap infomation header 位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
  3:color table 调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩×××(24位的BMP)就不需要调色板;
  4:位图数据阵列,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用3byte的RGB,而其他的小于24位的使用调色板中颜色索引值。
具体格式如下:
下面是一中bmp格式图片的16进制显示:
那么文件头及位图信息有0x36 Bytes 组成,即是地址 0x0000--0x0035的数据;
<1>、bitmap file heade-位图头信息:偏移量:0x0000,长度:27bytes
0x0000--0x0001: 42 4d 文件标识 指示件格式为:BM
两字节的内容用来识别位图的类型: 'BM' : Windows 3.1x, 95, NT, ... 'BA' :OS/2 Bitmap Array 'CI' :OS/2 Color Icon 'CP' :OS/2 Color Pointer 'IC' : OS/2 Icon 'PT' :OS/2 Pointer 注:因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识"BM"就行。
0x0002--0x0005: 56 ca 00 00 文件长度 用字节表示的整个文件的大小,这里的文件的16进制的长度是0x00 00 ca 56 BYTES的长度(51798字节长度);(高字节在后)
0x0006--0x0009: Reserved
0x000A--0x000D: 36 00 00 00 : Bitmap Data Offset 位图数据(bitmap data)的偏移量 这里是 0x36;(高字节在后)
<2>、bitmap information heade-位图信息头:偏移量:0x000E,长度由0x0e--0x11 的信息指定;这里是0x28,所以bitmap data 阵列从 0x28 + 0x0e = 0x36 开始;
0x000e--0x0011: 28 00 00 00 : bitmap header size 位图信息头(Bitmap Info Header)的长度,用来描述位图的颜色、压缩方法等。下面的长度表示:
28h - Windows 3.1x, 95, NT, ...
0Ch - OS/2 1.x
F0h - OS/2 2.x
注:在Windows95、98、2000等操作系统中,位图信息头的长度并不一定是28h,因为微软已经制定出了新的BMP文件格式,其中的信息头结构变化比较大,长度加长。
所以最好不要直接使用常数28h,而是应该从具体的文件中读取这个值。这样才能确保程序的兼容性。
0x0012--0x0015: B0 00 00 00 width 位图的宽度,以象素为单位; 这里是:0x00 00 00 b0 = 176
0x0016--0x0019: 62 00 00 00 height 位图的高度,以象素为单位; 这里是:0x00 00 00 62 = 98 ; 故而此bitmap的分辨率是:176 x 98;
0x001a--0x001b: 01 00 planes 位图的位面数(注:BMP的该值将总是1)
0x001c--0x001d: 18 00 bits per pixel 每个象素的位数 这里是 0x18 = 24 bits per pixel, 1 - 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色) 4 - 16 色位图 8 - 256 色位图 16 - 16bit 高彩色位图 ;每个pixel 占用 2bytes 数据 16bit(R5G6B5); 24 - 24bit 真彩色位图 ;每个pixel 占用 3bytes 数据 RGB; 32 - 32bit 增强型真彩色位图;每个pixel 占用 4bytes 数据 xRGB;
0x001e--0x0021: 00 00 00 00 compression 压缩说明: 0 - 不压缩 (使用BI_RGB表示) 1 - RLE 8-使用8位RLE压缩方式(用BI_RLE8表示) 2 - RLE 4-使用4位RLE压缩方式(用BI_RLE4表示) 3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)
0x0022--0x0025: 20 ca 00 00 bitmap data size 用字节数表示的位图数据的大小。比如是24bpp的:那么就是 分辨率*3 bytes;16bpp(每个像素2bytes)是 分辨率* 2bytes;
0x0026--0x0029: H resolution 用象素/米表示的水平分辨率 ; 这里是无效值
0x002a--0x002d: V resolution 用象素/米表示的垂直分辨率 ; 这里是无效值
0x002e--0x0031: colors 位图使用的颜色数。如8-比特/象素表示为100h或者 256;24bpp的真彩色这里的值无效值;
0x0032--0x00xxxx: impartant colors 指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要;(此处的终止长度由"0x000e--0x0011: bitmap header size 的数值来决定的,这里是0x28 那么这里的结束的值是0x0036;" )
0x00xxxx--0x00xxxx: palette : 调色板 这个由"0x000A--0x000D: Bitmap Data Offset"和"0x000e--0x0011: bitmap header size" 的数值公头决定; Bitmap Data Offset 减去 bitmap header size得出此处的长度,偏移量由bitmap header size 决定;这里是24bbpp的真彩色,所以没有此处数据;
0x00xxxx-- end of file: bitmap data : 真正的像素的数据(0x0002--0x0005:File Size 减去 0x000A--0x000D:Bitmap Data Offset 得出的数据),这里是24bpp,故这个数据的长度是 分辨率 * 3bytes;如果是 16bpp 则是:分辨率 * 2bytes;
一、jpeg图像格式
对于jpeg是格式是一种有损压缩,和bmp的无损数据相比较,图片的数据会有损失,而且这种损失是累加的。
++++++++++++++++++++++++++++++++++++++++++++++++
未完,待续。。。。。。