读取并修改bmp图片
文章目录
- 内容
- 使用工具
- 具体步骤
- 准备bmp图片
- BMP的存储格式
- 二进制形式读取BMP图像
- 使用C++读取BMP图片
- 使用c++存储BMP图片
- 总结和感悟
内容
对bmp格式的图片进行读取和修改,修改某些信息后储存。
使用工具
CodeBlocks、C++语言、bmp格式的图片一张。
具体步骤
准备bmp图片
由于现在的图片大多采用jpg格式存储,bmp格式的图片并不常见,所以要先获得bmp格式的片一张。可以将其他格式的图片转化成bmp格式。用windows的画图工具打开并以.bmp格式另存为即可。
BMP的存储格式
BMP文件的数据按照从文件头开始的先后顺序分为四个部分:
**bmp文件头(bmp file header):**提供文件的格式、大小等信息。
**位图信息头(bitmap information):**提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息。
**调色板(color palette):**可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表。
**位图数据(bitmap data):**图像数据。
具体内容教材中都给出,这里不再做详细解释。
二进制形式读取BMP图像
信息以二进制形式存储,自然可以用二进制的方式读取。又很多工具可以以二进制形式读取文件,如notpad++等,这里我使用的是Sublime,要先安装 HexViewer 插件,具体安装步骤和使用方式百度查得。
可以看到BM标识、文件头、信息头等信息都可以正确读取。
使用C++读取BMP图片
要掌握c++的fread函数,先读取到文件头和信息头。
利用信息头中的 biBitCount 判断是否有调色板,如有计算出调色板的大小并读入。要注意的一点是调色板中的每个元素对应到结构体中的RGB的顺序是相反的,所以在结构体中定义的顺序是 BGR 。
接下来就是读取图片信息,每次读取一行的像素信息。首先要确定的是图像的长宽,结合 biBitCount 得出每一行像素占用的空间。如果BMP图像在存储过程中会自动对其,若宽度不足4的倍数补全到4的整数倍,所以在计算时要考虑到这一方面。
接下来直接按照高度依次读取每行即可。
使用c++存储BMP图片
存储和读取时类似的,文件头等信息都获得后按读取到的数据写入到文件即可,同样注意的也是要处理每一行像素的自动补全情况。
在写入前可以对图片信息进行修改,我这里是把 RGB 三个值都等于其中最大的一个,即变成灰色,整个图像也都变为了灰色。修改后的图片如下:
总结和感悟
本次实践实现了对BMP图片的读取、修改和存储,其实学会了BMP图片的操作方式,其他类型的图片读取方法也类似,只不过文件头等信息不同,在代码中的处理略有差别,不过整体步骤是类似的。
得到图片的位图数据后可以对其进行各种操作,此处只是将彩色图片转化为黑白图片。在更深入的学习之后可以对数据进行傅里叶变换、几何变换、降噪等各种操作。
进行各种操作,此处只是将彩色图片转化为黑白图片。在更深入的学习之后可以对数据进行傅里叶变换、几何变换、降噪等各种操作。
通过本次实验,遇到的许多问题,学习到了许多新知识,但也仅仅是掌握了对图像的基本读取,通过更深入的学习,可以对图像进行更多、更复杂的变换,前路漫漫、道阻且长啊!!!
读取并修改bmp图片相关推荐
- 纯c++读取与显示BMP图片
2019/10/7 给某些网络巨婴的说明 第一,不会配置vs环境的请绕道 第二,不懂字符集区别的请走开 第三,不会定义类的成员变量的请去学习 第四,不会处理编译器错误信息的请去百度 第五,什么都不会只 ...
- bmp文件头_「正点原子FPGA连载」第十九章SD卡读BMP图片LCD显示
1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...
- 基于ZYNQ的网页上传BMP图片至HDMI端口输出实例
目录 Change Log 0 前言 0.1 系统实现 0.2 源码下载 0.3 项目信息 1 ZYNQ开发板HDMI输出BMP图片功能:FPGA相关 1.1 系统框图 1.2 RTL图 1.3 Bl ...
- emwin从外部flash中读取bmp图片显示
在emwin中有提供了一个从外部读取图片数据进行显示的函数,如下: 而且提供了官方例程,不过官方历程中从外部读取是从外部文件系统中进行读取的bmp图片进行显示,官方例程如下 /* ********** ...
- java bmp_JAVA实现对BMP图片的读取
BMP图片格式,是windows自带的一个图片格式,(*bmp),在windows的系统下都支持这种格式,bmp格式与设备无关的位图(DIB)格式,BMP简称位图,BMP的原始数据是没有经过压缩处理的 ...
- c++jpg转bmp_用C++加速julia:BMP图片读取
最近写了一个程序,需要大批量地读取8位的BMP格式的灰度图,程序写完profiler一看,竟然读图和处理的时间不相上下,这是万万不可接受的.经过一番折腾,最后决定用C++来加速8位BMP图片的读取.目 ...
- C语言读取和存储bmp格式图片
开发过程中有时候需要解析bmp数据,下面先简单介绍bmp数据组成,后面附上C语言读取和存储bmp格式图片代码. 典型的位图文件格式通常包含下面几个数据块: BMP文件头:保存位图文件的总体信息. 位图 ...
- OpenGL-纹理读取BMP图片-代码
使用两种方法读取bmp图片,来作为OpenGL纹理. 1.通过对bmp数据格式的分析,http://blog.csdn.net/o_sun_o/article/details/8351037(详细解析 ...
- c语言编程读取bmp文件数据,c语言读取BMP图片的RGB数据
BMP图片是位图(bitmap),一般未压缩,要读取BMP文件只要知道它的文件结构就可以了,具体格式可以百度或者google,就不多说了,几个重要的点在代码里面有注释. /** c语言读取位图信息 * ...
最新文章
- IDEA显示类的结构 Alt+F7
- 用Python实现队列
- 机器人 知乎碧桂园_万亿负债之下,碧桂园启动人事调整
- Oracle存储过程基本语法介绍
- Bootstrap+DataTables后端排序分页详解
- iOS之获取设备的UUID
- 51Nod-1081 子段求和【前缀和】
- plt.plot绘图
- MySQL中的mysqldump命令使用详解
- html加拼音注释,古诗加拼音注释版.doc
- 银行对公业务数字化迎来新机遇
- excel与python生成正态分布的数据,实践
- word中公式编辑完后光标靠下解决办法
- easyUI1.7学习第一天_menu表单
- 全球及中国布鲁顿酪氨酸蛋白激酶抑制剂行业研究及十四五规划分析报告
- 坚果云 linux 使用方法,树莓派4B踩坑指南 - (10)安装坚果云(暂时失败)
- 词向量与词向量拼接_nlp中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
- Word控件Spire.Doc 【文本】教程(1) ;C#/VB.NET:从 Word 文档中删除文本或图像水印
- 【黑灰产犯罪研究】涉物联网犯罪
- 验证码识别dll库,识别率95%
热门文章
- 评论《大道至简》的感想
- BUAA-OO 第三单元作业 JML 总结与思考
- 四川计算机单招有哪些学校,2018四川单招学校名单有哪些【最新版】
- 网络嗅探器--网络大典
- Android 4.0.3 联系人(通讯录)应用源码学习
- This version of ChromeDriver only supports Chrome version 76
- 小鱼易连服务器地址怎么修改,小鱼易连如何修改服务器地址
- 那个点燃了火堆,并且拥有200多个笔名的男人
- 阿米巴经营管理模式是什么,能做什么,有什么好处和坏处?
- 英语语音篇 - 听音能写