我是靠谱客的博主 干净黄豆,最近开发中收集的这篇文章主要介绍DIB位图(Bitmap)的读取和保存,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

设备无关位图(Device Independent Bitmap)是可以保存在磁盘的位图文件,可以从磁盘读取到内存或者从内存保存到磁盘上。它的文件结构是标准化的,可以在Windows/Linux/Unix等平台上显示相同的效果。本文主要介绍了
1. 如果将位图文件从磁盘读到内存中
2. 在内存中对位图文件进行操作后,如何将位图保存到磁盘

1 读取位图到内存中

1.1 DIB文件结构

要将位图文件(.bmp)从磁盘读取到内存,首先要了解其文件结构。DIB的文件组成有以下4个部分:
1. 文件表头,主要包含了文件的类型(必须是BM),文件的大小(所占用的字节数)和位图的像素矩阵的便宜量。
2. 信息表头,包含了两部分内容:位图的相关信息(位图的大小、位深度、位面数、压缩和编码等)和指向RGB颜色表(调色盘)的指针。
3. RGB色彩对照表,也就是调色板,不一定会有。16位及以上直接使用RGB通道表示颜色,一般不需要调色板。
4. 位图的像素信息矩阵,表示具体的像素。1,4,8位颜色,保存的是调色板的索引,具体的颜色根据索引在调色板中查找;16位及其以上不使用调色板,直接使用RGB组成像素颜色。

1.2 在Windows下DIB的内存结构

要将DIB数据读取到内存,就需要在内存中分配相应的空间。Windows提供了几种结构体,结构体中的字段对应着DIB文件的各个信息值,具体如下
alter

引用自 http://blog.csdn.net/wenzhou1219/article/details/26162869

将DIB读取到内存只需要将磁盘数据填充到相应到结构体即可。在磁盘上DIB需要连续的结构存储,在内存中则不需要连续的存储空间,可以分段将数据读取到相应的结构体中。
读取DIB到内存的具体步骤:
1. 将文件头信息读取到BITMAPFILEHEADER结构体中。
2. 将位图头信息读取到BITMAPINFOHEADER结构体中。
3. 如果有调色板,则将其信息读取到RGBQUAD中。
4. 读取位图像素信息到像素矩阵中。

fp.Read(&bmfileHeader, sizeof(BITMAPFILEHEADER)); // 读取BMP文件头 
...
//读取文件信息头
ret = fp.Read(&bmHeader, sizeof(BITMAPINFOHEADER)); 
...
fp.Read(m_dibBits, GetBodySize());  //读取像素信息 
1.3 结构体各字段信息
BITMAPFILEHEADER

代表文件头信息的结构体BITMAPFILEHEADER的声明如下:

最后

以上就是干净黄豆为你收集整理的DIB位图(Bitmap)的读取和保存的全部内容,希望文章能够帮你解决DIB位图(Bitmap)的读取和保存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部