BMP图像数据偏移是什么

作者&投稿:滕燕 (若有异议请与网页底部的电邮联系)
BMP文件中图像数据是按什么顺序存放的?~

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:
◆ 位图文件头(bmp file header): 提供文件的格式、大小等信息
◆ 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息
◆ 调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表
◆ 位图数据(bitmap data):图像数据区
BMP文件头结构体定义如下:
typedef struct tagBITMAPFILEHEADER
{ UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图文件
DWORD bfSize; //4Bytes,整个BMP文件的大小
UINT16 bfReserved1; //2Bytes,保留,为0
UINT16 bfReserved2; //2Bytes,保留,为0
DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;
BMP信息头结构体定义如下:
typedef struct _tagBMP_INFOHEADER
{DWORD biSize; //4Bytes,INFOHEADER结构体大小,存在其他版本I NFOHEADER,用作区分
LONG biWidth; //4Bytes,图像宽度(以像素为单位)
LONG biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2Bottom
WORD biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1
WORD biBitCount; //2Bytes,图像像素位数
DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4
DWORD biSizeImage; //4Bytes,4字节对齐的图像数据大小
LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率
LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率
DWORD biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引
DWORD biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要
}BMP_INFOHEADER;
BMP调色板结构体定义如下:
typedef struct _tagRGBQUAD
{BYTE rgbBlue; //指定蓝色强度
BYTE rgbGreen; //指定绿色强度
BYTE rgbRed; //指定红色强度
BYTE rgbReserved; //保留,设置为0} RGBQUAD;
1,4,8位图像才会使用调色板数据,16,24,32位图像不需要调色板数据,即调色板最多只需要256项(索引0 - 255)。
颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。
颜色表中RGBQUAD结构数据的个数有biBitCount来确定,当biBitCount=1,4,8时,分别有2,16,256个表项。
当biBitCount=1时,为2色图像,BMP位图中有2个数据结构RGBQUAD,一个调色板占用4字节数据,所以2色图像的调色板长度为2*4为8字节。
当biBitCount=4时,为16色图像,BMP位图中有16个数据结构RGBQUAD,一个调色板占用4字节数据,所以16像的调色板长度为16*4为64字节。
当biBitCount=8时,为256色图像,BMP位图中有256个数据结构RGBQUAD,一个调色板占用4字节数据,所以256色图像的调色板长度为256*4为1024字节。
当biBitCount=16,24或32时,没有颜色表。
BMP图像数据区
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:
当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;
颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8。

bmp图像文件数据分为三个部分:

1、前14个字节为文件信息头,在这部分信息中包含了位图信息标志、该bmp图像的大小和图像实际数据的相对偏移量这三部分有用的信息。
位图标志一定为“0x4D42”,否则,该文件不是bmp图像。
在VC++中,这14个字节对应一个数据类型,类型名为“BITMAPFILEHEADER”,它的定义为:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //位图信息标志
DWORD bfSize; //图像的大小
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits; //图像实际数据的相对偏移量
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
可以设一个该类型的变量:BITMAPFILEHEADER bmfh,将bmp图像文件的前14字节数据读入这个变量中,然后通过判断bmfh.bfType == 0x4D42,确定是不是为bmp图像。

2、接下来40个字节为位图信息头,其中存储了该bmp图像的有关信息。这些信息包括:图像宽度(像素)、图像高度(像素)、图像长度(字节,仅仅是图像实际数据的长度,不包括各个信息头)、水平分辨率、垂直分辨率、每个像素的存储位数等信息。
其中,通过“每个像素的存储位数”这个信息可以知道图像的颜色:
如果“每个像素的存储位数”的值只有四种:为1,说明图像只有两种颜色(黑、白);为4,说明图像有16种颜色;为8,说明图像有256种颜色;为24,说明该图像为真彩色图像,颜色数为2^24。这四种取值对应四种bmp图像,也就是说,bmp图像只有这四种。
在这四种bmp图像种,前三种都需要在图像文件中包含调色板数据,分别存储三种图像的2、16、256种颜色。而最后一种bmp格式的图像不需要调色板,因为这种图像的“每个像素的存储位数”值为24,也就是说,存储一个像素值需要24位,正好可以存储一个像素的颜色(红、绿、蓝各8位)。
在VC++中,这40个字节的位图信息头也有一个数据类型,类型名为“BITMAPINFOHEADER”,它的定义为:
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, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

3、接下来若干个字节为调色板,只有前三种bmp图像有,第四种真彩色bmp图像没有这部分数据。
调色板是一个数组,每个数组元素有四字节,只有三个字节有用,另外一个没有。有用的三个字节存储一种颜色(红绿蓝各占一字节),这四个字节在VC++中定义为:
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
定义一个这种类型的数组即为调色板。数组的长度可由BITMAPINFOHEADER中的biBitCount推算出来。

4、上述三部分信息之后,即是实际的像素数据。一个像素的存储位数为1、4、8或16,正如前面所述。
如果是1位,对应的bmp图像应该有一个长度为2的调色板。这一位的值只能是0或1,用来指明该像素的颜色在调色板中的地址。
如果是4位,对应的bmp图像应该有一个长度为16的调色板。这4位的值有16种,同样指示该像素的颜色在调色板中的地址。
如果是8位,对应的bmp图像应该有一个长度为256的调色板。这8位的值有256种,同样指示该像素的颜色在调色板中的地址。
如果是24位,对应的bmp图像没有调色板,该像素的颜色由这24位数据直接表示。

bmp图像的数据就这几个部分。
任何一个bmp图像的像素都是由红绿蓝三种颜色组成(带调色板也好,不带调色板也好)。如果一个像素的红绿蓝三种色的值相等,那么该像素就是灰色的。灰度图是这样一种有严格规定的bmp图像:它是上述四种bmp图像的第三种,并且它的调色板的每个数组元素的红绿蓝三值都相同,所以灰度图的灰度种数是256。

若要保存图像,需要按顺序保存文件信息头、位图信息头、调色板(如果有)和图像的实际数据。程序可以这样写:
bool Write(CString FileName)
{
CFile file;
BITMAPFILEHEADER bmfh;

if(! (bmi && pBits))
{
AfxMessageBox("Data is not valid!");
return FALSE;
}
//创建文件
if(!file.Open(FileName,CFile::modeCreate | CFile::modeWrite))
{
AfxMessageBox("File creating fails!");
return FALSE;
}

//填写文件信息头
bmfh.bfType = 0x4d42;
bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
int nInfoSize = sizeof(BITMAPINFOHEADER) + GetPaletteSize() * sizeof(RGBQUAD);
bmfh.bfOffBits = sizeof(bmfh) + nInfoSize;
bmfh.bfSize = bmfh.bfOffBits + bmi->bmiHeader.biSizeImage;

//写文件
file.Write( (LPVOID)&bmfh, sizeof(bmfh));
file.Write( (LPVOID)bmi, nInfoSize);
file.Write( (LPVOID)pBits, bmi->bmiHeader.biSizeImage);

return TRUE;
}

BMP格式分成头部和数数据部等,头部是描述这幅图片的具体参数的,如宽、高、通道等,占54个字节。从第55个字节开始,才正式开始图像数据流。55就是所谓的BMP数据偏移量(date offset)。

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

BMP格式分成头部和数数据部等,头部是描述这幅图片的具体参数的,如宽、高、通道等,占54个字节。从第55个字节开始,才正式开始图像数据流。55就是所谓的BMP数据偏移量(date offset)。

你是指直接获取图像数据吗? 就是图像数据是一长串,你可以得到她的起始地址指针,然后根据偏移量,得到每个像素点的RGB值


佳能MP198打印机打印出的字会偏移(有图)怎么修
这个不是打印机头校准的问题!这个明显就是机械故障!你应该在打印的时候听听是不是有什么异响!用纸巾沾点缝纫机油擦擦打印机头来回走的那个光杠上!检查电机和传送皮带!

新机佳能MP259,用的连供,在使用一个多月后,出现黑色墨盒打印时候部分线 ...
需要做“打印头对齐”操作了。这样,你自己到网上看。进入佳能(中国你)官网,下面是步骤,点选:服务与支持——下载与支持——在图中选一体机——四个选项中,前三个选择你打印机的型号,第四个框中选择“常见问题解答”——点击“对齐打印头”,好,你就按照文中的指点进行“打印头对齐”操作,...

苹果iPhone 12 Pro Max相机评测:大而美丽
总体而言,iPhone 12 Pro Max上的图像伪影得到了很好的控制,但仍有改进的空间。手机在此子分数中失去了最多的分数以进行颜色量化,这种情况会在本应平滑呈现的颜色渐变不 理想的 情况下发生,但振铃(由于 过度锐化 )也是一个问题。其他较小的影响包括色相偏移,重影,莫尔条纹和融合伪影(合并来自多个摄像机的数据时出现...

什么是50mp摄像头?
50mp是指摄镜头有5000万像素。相机中MP的意思是指百万像素。MP是mega pixel的缩写。mega意为一百万,mega pixel指意为100万像素。“像素”是相机感光器件上的感光最小单位。就像是光学相机的感光胶片的银粒一样,记忆在数码相机的“胶片”(存储卡)上的感光点就是像素。要想得到分辨率高(也就是细腻...

新买的佳能mp236打印直线弯曲,喷墨正常,手动打印头对齐试过了也不行...
回答:激光机能打彩色,就是硒鼓单价高 用兼容耗材,基本都不会管售后

IDS的主要功能有哪些?
。IP实现允许接受这样的IP碎片包,并且根据偏移值来重组原始数据包。插入式攻击通过 增加一些数据包到数据流中导致终端系统重组很困难。被插入的数据包能够改变数据流的 先后顺序,进而阻止IDS正确地处理紧跟着的正确的数据包。包的插入重叠了老的数据,在 IDS系统上重写了数据流。某些情况下,插入数据包,改变了数据流...

MP格式文件用什么程序编辑打开?
MP文件可以使用Maya PLE打开。MP文件是Autodesk Maya Personal 创建的项目文件,Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。MP文件类似MA文件格式,一般非商业的都有水印标志。MP文件可以被Maya PLE打开,但不能被商业的maya版本打开。

PID项目详解(建议学习)
PID控制广泛用于温度、压力等需要精确控制的对象,涉及数据的转换和标准化处理。PID向导提供了直观的设置,如增益、积分时间(可调整以平衡消除积分和动态响应)、微分时间以及采样时间。它支持8个控制回路,允许自定义输出类型、单极性、偏移等特性。在模拟量输出控制中,如比例阀、变频器,输出点控制范围为...

无损音乐与有损音乐的区别
如图:这首歌的高频部分的频谱有很明显的裁剪的痕迹,所以很明显是有损压缩格式 这首歌的频谱覆盖了整个图像的y轴,属于完整饱满的声谱,明显是无损格式。小贴士:普通CD的格式就是通常我们所知的WAV 在音质上肯定是要高于mp3.所以只要在有条件的情况下,CD的音质始终是最好的。

魔兽私服
在第7节中,是写出了0x0一直到0x86,8节中之写出了0x87,后面应该是使用得偏移量写的,如8节中写1就表示0x88。以此类推。——classes.scp篇classes.scp包含对于种族的初始化定义。以暗夜精灵为例,其含义如下:startmap=1\/\/Kalimdor出生地图编号startzone=14\/\/Teldrassil出生地点编号startpos=10311.3832.4631326.411....

五常市13344216725: BMP图像数据偏移是什么 -
益桑尿毒: BMP格式分成头部和数数据部等,头部是描述这幅图片的具体参数的,如宽、高、通道等,占54个字节.从第55个字节开始,才正式开始图像数据流.55就是所谓的BMP数据偏移量(date offset).BMP(全称Bitmap)是Window操作系统中...

五常市13344216725: ply格式文件,用C语言怎么读入,并存储在哪种数据结构中 -
益桑尿毒: 只要你理解了ply文件的结构,就很容量实现了. 就比如: BMP图像数据保存是这样的:先保存图像的文件头,再保存图像的信息头,再保存一个颜色表,最后才是图像数据. (下面就以图像的文件头作详细说明) 图像的文件头的信息如下:偏...

五常市13344216725: BMP格式文件的数据结构 -
益桑尿毒: BMP是一种与硬件设备无关的图像文件格式,其支持1,4,8,16,24,32位的图像存储,并且支持非压缩和压缩这两种存储方式,数据是以Little Endian依次存储.由于历史的原因,存在Windows和OS/2两种类型的BMP,目前Windows类型的BMP基...

五常市13344216725: 图片格式png ,bmp,jpg,有什么区别 -
益桑尿毒: 一,格式大小不同 1、jpg格式:即为jpeg格式,是通过压缩改变画质和文件尺寸的格式.2、png格式:png可以对图像进行无损压缩,并且压缩体积比jpg格式要小得多. 3、bmp格式:Windows中使用的标准图像格式. 二,适用范围不同 ...

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

五常市13344216725: BMP格式是什么 -
益桑尿毒: 典型的BMP图像文件由四部分组成: 1:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息; 2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息; 3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板; 4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值.

五常市13344216725: 如何将二值图象转化为数据矩阵,运用MATLAB或者VC? -
益桑尿毒: 图像本身就是矩阵,哈哈,你用photoshop把它保存成raw格式的,就完全是个矩阵了,然后根据它的格式把黑的转换为0,把白的转换为1.如果保存成bmp的,那图像数据和文件头之间有一定的偏移,但这个偏移也是固定的,图像的数据部分是个纯粹的矩阵.用特定类型的图像格式来做,其他的什么都不需要,会自己读写文件就可以了,而且文件都是没有格式的.

五常市13344216725: 求助:java 如何获取bmp图片的点阵数据 -
益桑尿毒: 图片文件点阵.比如bmp格式的文件头偏移12h~15h是宽度,偏移16h~19h是高度,图像部分的数据,就是按这尺寸记录着每个像素点....建议装个UltraEdit工具,对文件的结构进行分析,或在网上搜搜关于图像数据结构方面的资料,自然,你就对图片的数据心中了然的了.

五常市13344216725: 为什么256彩色bmp的文件头中BfoffBits是1082?
益桑尿毒: 文件头长度应该是一样的, 不同的部分是属于调色板信息. 你可以用ULTRAEDIT对比一下. ----------------------------- 未压缩的图像信息区的大小.除了真彩色模式外,其余的均大于或等于数据信息的大小.这是为什么呢?原因有两个: 1.BMP文...

五常市13344216725: 关于图像格式技术!懂的答!谢谢有追分!! -
益桑尿毒: 本人正在做位图文件的压缩方面的毕业设计课题,了解一些,告诉你,一、BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.1、 BMP文件头:BMP文件...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网