Bmp 图片格式学习和拆分
来源:互联网 发布:淘宝支付宝登录 编辑:程序博客网 时间:2024/05/17 08:31
文件格式
典型的BMP图像文件由四部分组成。
1. 位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;
2. 位图信息结构体,它包含有BMP图像的宽、高、压缩方法以及定义颜色等信息;
3. 调色板,这部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24 bits的BMP)就不需要调色板。
4. 位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其它小于24位的使用调色板中颜色所引用值。
在默认字节对齐方式下,这样读取BMP图像会出现错误。由于系统默认情况下,结构体以4字节对齐,这样,对于结构体中不够4字节的字段,会自动填充,使得其也占据4个字节。对于像BMP图像这样采用1字节保存的文件,读取就会出错。
位图文件主要分为如下4个部分:
块名称 对应Windows结构体定义大小(Byte)
文件信息头BITMAPFILEHEADER14
位图信息头BITMAPINFOHEADER40
颜色表(调色板)RGBQUAD(option)
位图数据(RGB颜色阵列)BYTE* 由图像长宽尺寸决定
BITMAPFILEHEADER 中的重点参数说明:
bfOffBits 表示从文件头开始到实际的图像数据之间的字节的偏移量。
BITMAPINFOHEADER中的重点参数说明:
biHeight 表示图像的高度,以像素为单位。这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。
Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。
图像真正的数据,比如一张图像的大小为800*600,则该部分数据的长度就应该是800*600像素,也即800*600*24/8字节(如果是24位的图片,即一个像素用24bit来存储,每个像素点上有3个字节,分别用来表示b, g, r的颜色)。
在Windows下,RGB颜色阵列存储的格式其实是BGR。对32为的RGB位图像素数据是BGRA。A表示透明通道Alpha通道,该值是该像素点的透明属性,取值在0(不透明)到255(不透明)之间。对于24位的图像来说,因为没有Alpha通道,故整个图像都不透明。
字节对齐:
位图数据记录了位图的每一个像素值,记录顺序是:扫描行内是从左到右,扫描行之间是从下到上。且Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,所以向文件中写入的位图数据的大小应该为:
每行图像的字节数: bmppitch = ((biWidth * bitCountPerPix + 31) >> 5) << 2;
biWidth --- 图像的宽度,bitCountPerPix --- 图像的位数
- Bmp 图片格式学习和拆分
- bmp图片格式
- BMP图片格式
- BMP图片格式
- BMP图片格式
- BMP图片格式
- BMP图片格式
- bmp图片格式
- BMP图片格式
- BMP图片格式
- bmp图片格式学习(c++代码)
- BMP、GIF和JPEG图片格式简介
- opencv:bmp和opencv图片格式的转换
- bmp图片格式解析
- BMP图片格式说明
- bmp图片格式了解
- bmp图片格式了解
- BMP图片格式解析
- java Queue容器实现
- 求一个子串在整串中出现的次数。
- android计时器暂停问题
- Failure [INSTALL_FAILED_OLDER_SDK]
- 优秀的js函数
- Bmp 图片格式学习和拆分
- Apache或XAMPP 搭建本地svn 服务器
- 日语约音
- 每日一算法:求m^n的结果,m,n可以很大
- 最大似然估计和最大后验概率
- 《响应式Web设计——html5和css3实战》读书笔记
- ext接受后台数据乱码问题的解决
- Android程序架构目录结构介绍
- 容灾系统简介