bmp图片解析
BMP图片文件详解
有一个长宽各为 200 个象素,颜色数为 16 色的彩色图,每一个象素都用 R,G,B 三个分 量表示,因为每个分量有 256 个级别,要用 8 位( bit),即一个字节(byte)来表示,所以每个象素需要用 3 个字节。整个图象要用 200*200*3, 约 120k 字节,可不是一个小数目呀! 如果我们用下面的方法, 就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每 一行记录一种颜色的 R,G,B 值。这样当我们 表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例 子,如果表的第 0 行为 255,0,0(红色) ,那么当某个象素为
色时,只需要标明 0 即可。 让我们再来计算一下:16 种状态可以用 4 位(bit)表示,所以 一个象素要用半个字节。整个图象要用 200*2 00*0.5,约 20k 字节,再加上表占用的字节为 3*16=48 字节.整个占用的字节数约为前面的 1/6,省很多吧。 这 张 RGB 的 表 , 即 是 我 们 常 说 的 调 色 板 (Palette) , 另 一 种 叫 法 是 颜 色 查 找 表 LUT(LookUpTable),似乎更确切一些。Windows 位图中便用
biXPelsPerMeter 指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在打印部 分详细介绍。
biYPelsPerMeter 指定目标设备的垂直分辨率,单位同上。
biClrUsed 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为 2 的 biBitCount 次方。
biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:
BMP图像格式详解及VB函数截图保存
BMP图像格式详解及VB截图保存方法2012-03-06 13:14BMP是一种与硬件设备无关的图像文件格式,使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,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)三个值代表一个像素。
*一个数组压缩标志,用于表明数据的压缩方案(如果需要的话)。
基于STM32的BMP图片解码系统_邸兴
用 ARM 公司最新的 V7 体系架构的内核 Cortex-M3, 它 的 速 口和连接到两条 APB 总线的外设。 所有型号的器件都包含 2
BMP图片格式详解
BMP图像格式详解一.简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。
Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。
BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
二.BMP格式结构BMP文件的数据按照从文件头开始的先后顺序分为四个部分:◆位图文件头(bmp file header):提供文件的格式、大小等信息◆位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息◆调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表◆位图数据(bitmap data):图像数据区BMP图片文件数据表如下:三.BMP文件头BMP文件头结构体定义如下:typedef struct tagBITMAPFILEHEADER{UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图文件DWORD bfSize; //4Bytes,整个BMP文件的大小UINT16 bfReserved1; //2Bytes,保留,为0UINT16 bfReserved2; //2Bytes,保留,为0DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;BMP文件头数据表如下:四.BMP信息头BMP信息头结构体定义如下:typedef struct _tagBMP_INFOHEADER{DWORD biSize; //4Bytes,INFOHEADER结构体大小,存在其他版本INFOHEADER,用作区分LONG biWidth; //4Bytes,图像宽度(以像素为单位)LONG biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2BottomWORD biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1 WORD biBitCount; //2Bytes,图像像素位数DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4DWORD biSizeImage; //4Bytes,4字节对齐的图像数据大小LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率DWORD biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引DWORD biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要}BMP_INFOHEADER;BMP信息头数据表如下:五.BMP调色板BMP调色板结构体定义如下:typedef struct _tagRGBQUAD{BYTE rgbBlue; //指定蓝色强度BYTE rgbGreen; //指定绿色强度BYTE rgbRed; //指定红色强度BYTE rgbReserved; //保留,设置为0 } RGBQUAD;1,4,8位图像才会使用调色板数据,16,24,32位图像不需要调色板数据,即调色板最多只需要256项(索引0 - 255)。
BMP图像格式详解
BMP格式图像文件详析首先请注意所有的数值在存储上都是按“高位放高位、低位放低位的原则”,如12345678h放在存储器中就是7856 3412)。
下图是导出来的开机动画的第一张图加上文件头后的16进制数据,以此为例进行分析。
T408中的图像有点怪,图像是在电脑上看是垂直翻转的。
在分析中为了简化叙述,以一个字(两个字节为单位,如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......BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。
一、图像文件头1)1:图像文件头。
424Dh=’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:每个像素的位数。
BMP图像结构分析.doc
分析未知文件数据结构格式时需要熟悉不同文件类型的一种或多种该类公开文件的数据存储格式,因为通常情况下未知文件数据结构格式很可能是在公开的文件格式上建立起来的,或只稍微修改了一些地方。
编程人员一般不会自己发明一种文件格式,因为编程人员大多数都很"懒",他们通常的做法是参考一些公开文件的格式,稍微修改一下。
例如,如果要分析的未知文件格式是属于图像类的,那么这个未知的图像文件格式必定与BMP文件格式有相似的地方。
熟悉BMP格式对研究和分析这个未知的图像文件格式有极大的帮助,如果掌握了BMP图像文件存储格式就可以利用BMP格式去匹配和猜测未知图像文件格式。
例如,如要分析的未知文件格式是属于3D模型的,那么这个未知的3D模型文件格式必定与3DS和X文件格式有相似的地方,所以研究未知的3D模型文件前需要先参考和学习一些常见的公开格式的模型文件,这与解密某个加密算法之前需要研究一些公开的加密算法是同一个道理。
因为本书是针对游戏资源文件解密,所以下面将要介绍和分析游戏资源文件的常用文件存储格式。
游戏资源文件大体上可以归到多媒体数据格式上,学习和研究这些多媒体文件格式对日后分析未知的游戏资源文件格式有很大帮助。
通过本章的学习读者可以掌握以下内容:BMP图像文件格式;PNG图像文件格式;X模型文件格式;md3模型文件格式。
5.1 BMP图像文件格式BMP图像文件格式是游戏中常用的图像资源文件格式,BMP图像文件起源早,程序员对BMP都比较熟悉,再加上BMP格式简单,读取和写入非常容易实现,所以无论Windows 的还是Driect X,都有支持读取和写入BMP文件格式的API函数。
针对BMP压缩的算法比较成熟,压缩效果也不差,而且都是无损压缩编码,即可以100%还原BMP图像质量。
虽然JPG格式压缩效果比较理想,但游戏编程人员一般极少使用,因为JPG要牺牲图像的质量来换取大的压缩率,加上JPG解码速度较慢和格式复杂,所以游戏中使用JPG格式的图像的情况不多(笔者目前只发现一款网络游戏使用JPG格式作为游戏里的图像格式,并且使用额外的数据保存了图像中的透明通道信息来让JPG支持透明色)。
bmp解码原理
bmp解码原理
BMP(Bitmap Image File)是一种常见的图像文件格式,其解码原理主要包括以下几个步骤:
1. 读取文件头信息:BMP文件以特定的文件头标识开始,用于标识该文件
是一个BMP格式的文件。
这些信息包括BMP文件的类型、大小、版本等。
2. 解析图像头信息:紧随文件头信息之后的是图像头信息,包括图像的宽度、高度、像素数、颜色深度等信息。
这些信息用于确定图像的尺寸、颜色模式等。
3. 读取像素数据:根据图像头信息中的宽度、高度和像素数,读取相应的像素数据。
BMP图像的像素数据按照一定的顺序存储,通常是按照行优先的
顺序逐行读取。
4. 转换像素数据:由于BMP图像的像素数据是以特定的格式存储的,解码时需要将这些数据转换为可显示的像素值。
这通常涉及到将颜色深度转换为实际的颜色值,以及进行必要的色彩空间转换等。
5. 显示图像:将解码后的像素数据送入显示设备,按照一定的显示模式进行显示,最终呈现出BMP图像的内容。
在解码过程中,需要注意一些细节问题,比如数据对齐、像素格式转换等。
此外,还需要根据具体的BMP版本和编码方式进行相应的解码处理。
BMP位图浅析
什么是位图计算机能以位图和矢量图格式显示图像。
位图(Bitmap)图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图像。
计算机屏幕其实就是一张包含大量像素点的网格。
当我们把位图放大时,每一个像素小点看上去就像是一个个马赛克色块。
矢量图(Vector)使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。
位图和矢量图最简单的区别就是:矢量图可以无限放大,而且不会失真;而位图则不能。
像Photoshop(PS)这样主要用于处理位图的软件,我们称之为图像处理软件;专门处理矢量图的软件,我们称之为图形设计软件,例如Adobe Illustrator,CorelDRAW,Flash MX等。
BMP位图文件常见的图像文件格式有:BMP、JPG(JPE,JPEG)、GIF等。
BMP图像文件(Bitmap-File)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。
Windows 3.0以后的BMP文件都是指设备无关位图(DIB,device-independent bitmap)。
BMP位图文件默认的文件扩展名是.BMP,有时它也会以.DIB或.RLE作扩展名。
创建BMP文件打开Photoshop,新建一个尺寸为2*3像素的文件。
放大图片到最大(1600%),然后用铅笔工具对每个像素都点一个不同颜色的点,如下图所示。
储存这个文件为BMP格式,文件名为“MyBmp.bmp”,在BMP选项中选择Windows,24位。
BMP文件结构BMP文件由4部分组成:1. 位图文件头(bitmap-file header)2. 位图信息头(bitmap-information header)3. 颜色表(color table)4. 颜色点阵数据(bits data)24位真彩色位图没有颜色表,所以只有1、2、4这三部分。
c语言解析bmp图片的实例
c语⾔解析bmp图⽚的实例⼼⾎来潮想了解下常⽤图⽚的格式解析,翻看了⼀些资料后,发现最简单的是bmp格式,所以先拿它开⼑。
BMP格式这种格式内的数据分为三到四个部分,依次是:⽂件信息头(14字节)存储着⽂件类型,⽂件⼤⼩等信息图⽚信息头(40字节)存储着图像的尺⼨,颜⾊索引,位平⾯数等信息调⾊板(由颜⾊索引数决定)【可以没有此信息】位图数据(由图像尺⼨决定)每⼀个像素的信息在这⾥存储⼀般的bmp图像都是24位,也就是真彩。
每8位为⼀字节,24位也就是使⽤三字节来存储每⼀个像素的信息,三个字节对应存放r,g,b三原⾊的数据,每个字节的存贮范围都是0-255。
那么以此类推,32位图即每像素存储r,g,b,a(Alpha通道,存储透明度)四种数据。
8位图就是只有灰度这⼀种信息,还有⼆值图,它只有两种颜⾊,⿊或者⽩。
⽂件信息头格式typedef struct tagBITMAPFILEHEADER {unsigned short bfType; // 19778,必须是BM字符串,对应的⼗六进制为0x4d42,⼗进制为19778unsigned int bfSize; // ⽂件⼤⼩unsigned short bfReserved1; // ⼀般为0unsigned short bfReserved2; // ⼀般为0unsigned int bfOffBits; // 从⽂件头到像素数据的偏移,也就是这两} BITMAPFILEHEADER;图⽚信息头格式typedef struct tagBITMAPINFOHEADER {unsigned int biSize; // 此结构体的⼤⼩int biWidth; // 图像的宽int biHeight; // 图像的⾼unsigned short biPlanes; // 1unsigned short biBitCount; // ⼀像素所占的位数,⼀般为24unsigned int biCompression; // 0unsigned int biSizeImage; // 像素数据所占⼤⼩, 这个值应该等于上⾯⽂件头结构中bfSize-bfOffBitsint biXPelsPerMeter; // 0int biYPelsPerMeter; // 0unsigned int biClrUsed; // 0unsigned int biClrImportant;// 0} BITMAPINFOHEADER;调⾊板信息这⾥需要根据⽂件信息头的bfOffBits是否等于54(由前⾯的固定14+40字节得出)来判断是否存在此调⾊板信息,如果是,则不存在;⼤于的话即存在。
BMP图片格式说明
BMP简介BMP是一种与硬件设备无关的图像文件格式,使用非常广。
BMP是Windows环境中交换与图有关的数据的一种标准,在Windows环境中运行的图形图像软件都支持BMP图像格式。
文件结构典型的BMP图像文件由三或四部分组成:1:文件头2:图像参数3:调色板(目前基本不使用)4:位图数据1:文件头,它包含BMP图像文件的类型、内容尺寸和起始偏移量等信息;字节顺序数据结构描述1,2short 高8位为字母’B’,低8位为字母’M’3,4,5,6int文件大小7,8short保留字19,10short保留字211,12,13,14int数据部分偏移量数据部分偏移量⏹位图数据部分相对于文件首的起始偏移量⏹数据部分偏移量的存在,说明图像数据部分并不一定要紧随图像参数或调色板之后放置,BMP图片的制作者其实可以在调色板之后、数据部分之前填充任何内容,只要正确地设置偏移量即可。
返回字节顺序数据结构描述31,32,33,34int压缩方式35,36,37,38int水平分辨率,pixels-per-meter39,40,41,42int垂直分辨率,pixels-per-meter43,44,45,46int垂直分辨率,pixels-per-meter47,48,49,50int引用色彩数51,52,53,54int关键色彩数back3:调色板,可选部分,⏹bpp:表示图像像素值的位数叫做图像的像素深度,又称为位/像素(BPP)。
⏹bpp较小的位图需要调色板;有些位图,比如24bpp(真彩色)图就不需要调色板;⏹今天讲的是打开真彩色BMP位图。
真彩色即24位图,它是不需要调色板的。
4:位图数据这部分的内容因位图实际像素位数和编码格式而不同,在真彩位图中直接使用RGB真彩色值;而有调色板的位图则使用调色板中颜色索引值。
位图数据的读取⏹1.每行的字节数必须是4的倍数,如果不是,则需要用0补齐。
⏹2.BMP位图数据的存放是从下到上,从左到右的。
BMP格式解析
BMP格式解析⼀、介绍 BMP⽂件格式,⼜称为位图,是Windows系统中⼴泛使⽤的图像⽂件格式。
BMP⽂件的数据分为四个部分:bmp⽂件头(bmp file header):提供⽂件的格式、⼤⼩等信息位图信息头(bitmap information):提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息调⾊板(color palette):可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表位图数据(bitmap data):图像数据⼆、代码⽰例#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>struct bmp_header{unsigned short type; //⽂件类型unsigned int total_size; //整个位图⼤⼩,头部 + 图像数据单位字节unsigned short reserved1;unsigned short reserved2;unsigned int valid_offset; //图像数据偏移量} __attribute__((packed));struct bmp_info{unsigned int info_size; //该结构体⼤⼩,固定40字节unsigned int bmp_width; //图⽚宽度unsigned int bmp_height; //图⽚⾼度unsigned short planes; //总是1unsigned short bitcount; //像素多少位表⽰unsigned int compression; // 0:BI_RGB 不压缩; ......unsigned int img_size; //图像有效数据⼤⼩,单位字节int x_pix_meter; //⽔平分辨率,像素/⽶表⽰int y_pix_meter; //垂直分辨率,像素/⽶表⽰unsigned int color_used; //位图实际使⽤彩⾊表中的颜⾊索引数,⼀般0unsigned int color_mportants; //color_used 上⾯使⽤的索引值重要数, 0表⽰都重要}__attribute__((packed));int bmp_analyze(unsigned char *path){int fd = -1, i;struct bmp_header f_header;struct bmp_info f_info;//打开bmp图⽚fd = open(path, O_RDONLY);if (fd < 0) {printf("open %s error.\n", path);return -1;}//读取⽂件头信息read(fd, &f_header, sizeof(struct bmp_header));printf("type:0x%x(%c%c)\n", f_header.type, f_header.type&0xff, (f_header.type>>8)&0xff);printf("total_size:%d\n", f_header.total_size);printf("reserved1:%d\n", f_header.reserved1);printf("reserved2:%d\n", f_header.reserved2);printf("valid_offset:%d\n", f_header.valid_offset);read(fd, &f_info, sizeof(struct bmp_info));printf("info_size:%d\n", f__size);printf("bmp_width:%d\n", abs(f_info.bmp_width));printf("bmp_height:%d\n", abs(f_info.bmp_height));printf("planes:%d\n", f_info.planes);printf("bitcount:%d\n", f_info.bitcount);printf("compression:%d\n", f_pression);printf("img_size:%d\n", f_info.img_size);printf("x_pix_meter:%d\n", f_info.x_pix_meter);printf("y_pix_meter:%d\n", f_info.y_pix_meter);printf("color_used:%d\n", f_info.color_used);printf("color_mportants:%d\n", f_info.color_mportants);//关闭打开的⽂件close(fd);return0;}int main(int argc, char **argv){unsigned char *path = argv[1];if(path == NULL) {printf("invalid file path \n");exit(-1);} else {printf("read bmp file: %s\n", path); }bmp_analyze(path);return0;}三、效果./a.out 24x32_3.bmpread bmp file: 24x32_3.bmptype:0x4d42(BM)total_size:3126reserved1:0reserved2:0valid_offset:54info_size:40bmp_width:24bmp_height:32planes:1bitcount:32compression:0img_size:3072x_pix_meter:2834y_pix_meter:2834color_used:0color_mportants:0四、附件解析 链接:注意格式是ARGB8888,只不过⼩端存储(低字节放在低地址),图⽚数据⼤⼩ 24*32*4字节 = 3072,加上头部 14 + 40 = 3126 字节后续会使⽤该BMP图⽚打⽔印在YUV上:。
bmp图像压缩算法详细解析
问题:将一张bmp图像的灰度值压缩存储到一个中间文件,然后利用中间文件还原这张图片。
初一看,这应该是两个程序吧,一个压缩程序一个解压程序。
那就先压缩好喽,恩,压缩...可是要怎么读取它的灰度值呀?文件里不会只保存它的灰度值吧,点开属性,发现这是一张256*192的图片,如果图片文件里只有灰度值,那么大小应该是256*192 B,而实际大小是50230字节。
可见还有其它信息,根据经验,应该还有一个对图像的描述信息吧,这样那些图像显示程序才能知道以怎样的方式去显示它,毕竟不是所有的bmp图片都是灰度图片。
额,只好求助百度了.............经过整理,我把bmp图像编码格式发到下面。
BMP文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息(BitmapInfoHeader)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body)第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。
其定义如下:typedef struct tagBITMAPFILEHEADER{WORD bfType; 位图文件类型,必须是0x424D,即字符串“BM”DWORD bfSize; 位图文件大小,包括这14个字节。
WORD bfReserved1; Windows保留字,暂不用。
WORD bfReserved2; Windows保留字,暂不用。
DWORD bfOffBits; 从文件头到实际的位图数据的偏移字节数} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。
BMP图像格式解析及其空间域处理的实现
Wid w 采 用 的 图像 文 件存 储 格 式 .在 Wid w no s no s 环 境 下 运 行 的所 有 图像 处 理 软 件 都 支 持 这 种 格
式 。Wid w . n o s 0以前 的 B 3 MP位 图文件 格 式 与显
tp d f t c t BT P IE E E { y e e r t a I MA F L H AD R su g
理, 因此 需 要熟 悉 B MP图像 的 内部 结 构 , 文就 本
着重介 绍其结 构 ,并根 据 它 的结 构 进行 一些 简单
的图像 处理 。
本文 用 C语 言 中 的文件 操作 函数 ( p nf a ,  ̄ e ,ed fr e等) wi t 以字 节为 单位 读 取 位 图文件 头 ( 1 以 0进
示 , 字节 4个
U N f sre l / 留位 , 被使 用 , 置 I T b evd ;/ Re 保 不 设
为 0 2个 字节 ,
了让 Widw n o s能 够 在 任 何 类 型 的显 示 设 备 上 显 示B MP位 图文件 。B MP位 图文 件 默认 的文 件扩 展 名是 B MP或 者 b p m。 由于 进行 图像 处 理 时 多采 用 对 B MP进 行 处
B T P I E AD R 1 I MA F L HE E 4个 字节 B M I F HE D R 4 I AP N 0 A E 0个 字节 r
调 色板 信 息
位 图 数据
RBUD GQA
B YTE
不定( 根据 位 图像 素 位 数 不同而不同) 不 定
图数据 。为 了表 示这些 信 息 的方 便我 们把 这 几部 分分 别 采用结 构体 的形 式来 定义 。具 体信 息 如表
三分钟解析24位真彩BMP格式文件 - 推酷
请 输 入 评 论 内 容 ...
已发表评论数(0)
搜索文章
/articles/FvaIVj
登录后评论
4/7
15-4-9
相关站点
ITeye-博客
+ 订阅
相关主题
技术
三分钟解析24位真彩BMP格式文件 - 推酷
热门文章
1. 栈溢出的利用
2. 记一次tcmalloc分配内存引起的coredump
3. RapidJSON —— C++ 快速 JSON 解析器和生成器
4. C++学习之引用
/articles/FvaIVj
5/7
15-4-9
三分钟解析24位真彩BMP格式文件 - 推酷
5. 在 Visual Studio 本地引用 Boost 6. Exploiting CVE-2015-0311, Part II: Bypassing Control Flow Guard on Window..
/articles/FvaIVj
7/7
/articles/FvaIVj
1/7
15-4-9
三分钟解析24位真彩BMP格式文件 - 推酷
000000XX0h 是用来方面看数据的(也可以方便记数),比如数据表的第一行的第三个字节数 据 9E 的位置就是 00000000h + 2 = 00000002h ,这就是为什么在一些解释中定位中使用 000000XXXh 的原因。
因此在我们的读取数据中需要根据 BMP 图像的宽度来判断是否被补 0 ,判断方法就是先 判断一行的字节数是否可以被 4 整除,如果整除则不需要补 0 ,如果没有整除,则求出补的 0 的个数(具体计算方法是, bu_0_number = width( 像素 ) * 3 % 4 ),那么就知道在每 一行的末尾都补了 bu_0_number 个 0 ,因此我们在读取时绘制图片时就要忽略这些数据。 (补充:求每一行的字节数 size = width * 3 )
2.MFC-bmp图片读取保存
第二课 bmp图片格式解析<一>.BMP格式定义BMP文件格式是Windows操作系统推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,故称位图(bitmap),其扩展名为BMP。
BMP图像文件被分为4个部分:a.位图文件头b.位图信息头c.颜色表d.位图数据a.颜色表中RGBQUAD结构数据的个数有biBitCount来确定:当biBitCount=1,4,8时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader; // 位图信息头RGBQUAD bmiColors[1]; // 颜色表} BITMAPINFO;b.位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。
位图的一个像素值所占的字节数: 当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图片在MFC工程中的定义存在2个未解问题:a. bmp结构时我定义成系统自带的结构,否则会多2个字节在图片最后为CD;b. 在read中malloc只能申请4字节的空间,但fread(,m_nImage,)读入位图大小个。
第一步:添加BMP信息文件头文件—新建—创建ImageStruct.h—包含BMP格式的文件头部分的结构。
常见图片格式分析-bmp,png
常见图⽚格式分析-bmp,png⼀、bmp图⽚①单⾊位图:每个像素最多可以表⽰2种颜⾊,只需要使⽤长度为1的⼆进制位来表⽰,因此每个像素占1/8byte② 16⾊位图:每个像素最多可以表⽰16种颜⾊,只需要长度为4(2^4=16)的⼆进制表⽰,每个像素占1/2byte③ 256⾊位图:每个像素最多表⽰256种颜⾊,需要长度为8(2^8=256)的⼆进制表⽰,每个像素占1byte④ 24位位图:即RGB三原⾊位图,每个像素占24位,3个byteps:⼀字节(1byte)=8位(8bit)图形的⼤⼩ = 图⽚的总像素*每个像素的⼤⼩,图⽚的总像素 = 图⽚长*⾼bmp图⽚格式:①位图⽂件头bmfh(占14个字节):数据结构如下:typedef struct tagBITMAPFILEHEADER {WORD bfType; //类型名,字符串“BM”,占2个字节,DWORD bfSize; //⽂件⼤⼩,占4个字节WORD bfReserved1; //保留字,占2个字节WORD bfReserved2; //保留字,占2个字节DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和,占4个字节} BITMAPFILEHEADER;②位图信息头bmih(占40个字节)typedef struct tagBITMAPINFOHEADER{DWORD biSize; //指定此结构体的长度,0x28LONG biWidth; //位图宽LONG biHeight; //位图⾼.为正,表⽰从下往上存储,左下⾓是起点。
为负,表⽰从上往下储存,左上⾓是起点 WORD biPlanes; //平⾯数,为1WORD biBitCount //采⽤颜⾊位数,可以是1,2,4,8,16,24,32DWORD biCompression; //压缩⽅式,可以是0,1,2,其中0表⽰不压缩DWORD biSizeImage; //实际位图数据占⽤的字节数LONG biXPelsPerMeter; //X⽅向分辨率LONG biYPelsPerMeter; //Y⽅向分辨率DWORD biClrUsed; //使⽤的颜⾊数,如果为0,则表⽰默认值(2^颜⾊位数)DWORD biClrImportant; //重要颜⾊数,如果为0,则表⽰所有颜⾊都是重要的} BITMAPINFOHEADER;③彩⾊表aColors单⾊位图彩⾊表占8字节16⾊位图彩⾊表占64字节256⾊位图彩⾊表占1024字节⼆、png图⽚png图⽚格式:由8个字节的PNG⽂件署名和数据块组成png⽂件署名域:89 50 4e 47 0d 0a 1a 0a (固定)IHDR数据块:00 00 00 0d(说明IHDR头块长度为13)49 48 44 52(IHDR的hex值)00 00 00 64(图像的宽,这⾥为100像素)00 00 00 4f(图像的⾼,这⾥为79像素)08 表⽰⾊深 02 表⽰颜⾊类型 00 预留 00 预留 00 ⾮隔⾏扫描92 eb f7 f6(CRC校验)※这⾥需要注意的是图像的宽、⾼数据,ctf题⽬经常将修改宽⾼后的图⽚作为题⽬来隐藏信息最后得有个IEND数据块,通常值为 00 00 00 00 49 45 4E 44 AE 42 60 82在IEND块后⾯添加任何的字符都对⽂件的打开造成不了影响,那我们就可以在这⾥藏⼀些数据了。
BMP图像结构 图象处理及应用 教学课件
显示器可以被设置成16、256、真彩色等显示模式,前两 种模式需要调色板。在16或256色模式下,程序必须将想 要显示的颜色正确地设置到调色板中,这样才能显示出 预期的颜色。图3-1显示了调色板的工作原理。使用调色 板的一个好处是不必改变视频内存中的值,只需改变调 色板的颜色项就可快速地改变一幅图象的颜色或灰度。
含义 内容固定为“BM”作为BMP文件识别标志 图象文件的总字节数 保留值,没有任何作用,因此值设为0 保留值,没有任何作用,因此值设为0 位图数据距文件头的偏移量即其在文件内的起始地址 代表BITMAPINFOHEADER数据结构的存储容量 位图的宽度,单位为象素点 位图的高度,单位为象素点 这项值固定为1 象素的位数(可能为1、4、8、24中的一种) 0表示不压缩,1为256色、2为16色图象的压缩 表示BMP图象文件的图象数据占用的字节数 水平分辨率(象素点/米) 垂直分辨率(象素点/米) 图象中使用的颜色数 图象中重要的颜色数 蓝色的比例 绿色的比例 红色的比例 保留值,设为0
图象处理及应用
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; }BITMAPINFOHEADER;
图象处理及应用
图象处理及应用
成象测井
成象测井技术是油气勘探中真正的“地 下眼睛”,它采用阵列扫描或旋转扫描方式, 从井壁或井壁附近采集大量地质信息,并通 过图象处理技术获取井壁的二维图象,或井 眼周围某一探测深度内的三维图象,并通过 图象色度或灰度变化从而对井壁周围的地层 沉积、构造变化特征进行精细、直观的描述。 成象测井技术在裂缝、孔洞的探测和薄互层 评价等储层非均质性研究方面具有常规测井 所无法比拟的优势,在探测复杂岩性、裂缝 性油气藏方面更是“独具慧眼”,这使其已 成为当今世界测井技术的主流,代表着2l世 纪测井技术发展的方向 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
位图文件头:
424D = BM 图片格式
小端0x00038436 表示文件大小= 230454
保留必须为0
0x00000036 图像数据的起始位置,以相对于文件头的偏移量表示,以字
节为单位0x36 =54
位图信息头:
本结构所占用字节数0x28 =40字节
位图宽度0xf0 = 240
位图高度0x0140 = 320
目标设备的级别,必须为1
0x18 = 24 BBP
压缩类型必须为0 不压缩
位图大小0x038400 = 230400
位图水平垂直分辨率
位图实际使用调色板中的颜色数0表示使用所有调色板项
位图显示过程中重要的颜色数0表示所有都重要
问题的关键在于怎样把24位(3字节)转换到16位(2字节)?
P1表示图像信息的最后一行,= 位图头信息偏移+ 位图宽*(高-1)
注:像素阵列中的最后一行是LCD屏的最上面的第一行.但每一行的像素的扫描和LCD 屏是一样的,都是从左到右.。