bmp格式浅析

转载:http://www.cnblogs.com/souroot/archive/2012/06/03/2532556.html

BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

组成

  典型的BMP图像文件由四部分组成:

  1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;

  2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;

  3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;

  4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。

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;

范例:

bmp图片

首先要使用notepad++,并下载Hex-Editor插件

然后进行查看,效果如下:

时间: 2024-10-28 21:41:23

bmp格式浅析的相关文章

图像BMP格式介绍

1 图像BMP格式说明 BMP是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8bit及24bit.BMP文件存储数据时,图像的扫描方式是按从左到右.从下到上的顺序. 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式. 2 图像BMP文件结构以及结构说明 典型的BMP图像

bmp格式图像的读写函数(对一个开源代码的封装)

在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像. 前提 我们不需要知道这段代码是如何读取bmp格式图像的,不需要知道bmp格式的图像时如何存储的,我们只需要知道有三个参数可以确定图像的尺寸大小,他们是图像的宽度.高度.通道数(例如灰度图像有一个通道,rgb图像有三个通道(rgb)).图像包含高度X宽度个像素,每个像素有相同的通道,他们在内存中按照一定的顺序存储,例如三通道bmp图像,在内存中

MFC中显示 .bmp格式的位图

最近在看VisualC++ 图像处理的书籍,表示一直在从基础做起,今天就记录一个简单功能的实现,显示.bmp格式的位图. 首先需要理解的是窗口创建的过程包括两个步骤:首先擦除窗口的背景,然后在对窗口进行重新绘制. 一般而言,对于单文档或多文档的MFC程序,显示图像的代码要放在OnDraw函数之中.刚刚说过,窗口重绘时,要先将窗口的背景擦除,也就是发送WM_ERASEBKGND消息,然后用OnEraseBkgnd()函数处理这个消息,所以我们的显示图像的代码也可以放在这个函数之中.当然,这里只是为

bmp格式解析

最近一直在写图像处理的作业,好多啊 bmp格式简介 a.格式组成 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及定义 颜色等信息: 3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真 彩色图(24位的BMP)就不需要调色板: 4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位 图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值. b.对应数据结构 BMP文件头(

BMP格式详解

BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源.Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持. 下面以Notepad++为分析工具,结合

BMP格式介绍(一)

原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有关系的问题恰恰是图片格式的核心内容以至于整个计算机系统的核心内容,多媒体技术虽然没有数据结构,操作系统等计算机基础课 所占的地位重,但是在于研究编码方面有着非常重要的地位.图像其实可以看做一种特殊编码过的文件. 二.从简单的24位bmp开始 bmp是最常见也是编码方式最简单的图片格式,这里不说明一幅图片是怎

BMP格式,转载

BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源.Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持. 下面以Notepad++为分析工具,结合Windows的位图数据结构对BMP文件格式进行一个深度的剖析. BM

关于thinkphp上传bmp格式图片

thinkphp中上传bmp格式图片,缺少了imagecreatefrombmp()方法和imagebmp()方法, 此方法在simplewind\Core\Library\Think\Image\Driver\Gd.class.php中open()和save时调用到,至于其他地方用到的都是相同的方法. //打开图像open中 if('gif' == $this->info['type']){ $class = 'Think\\Image\\Driver\\GIF'; $this->gif =

图像格式转换之BMP格式转换为JPG格式

1 // bmp2jpg.cpp : 定义控制台应用程序的入口点. 2 // 3 #include "stdafx.h" 4 #include "jpeglib.h" 5 #include "stdlib.h" 6 #pragma comment(lib,"libjpeg.lib") 7 #pragma pack(4) //两字节对齐,否则bmp_fileheader会占16Byte 8 9 /*图像bmp格式文件头结构*/