# BMPproject **Repository Path**: XiangFugui/BMPproject ## Basic Information - **Project Name**: BMPproject - **Description**: 二进制读入bmp文件,修改像素数据,实现一些诸如缩放,灰度化的功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-09-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BMPproject ### 项目介绍 一个简单的对bmp文件处理的程序 **** ### 技术栈 * Python 3 ### 开发环境 * JetBrains Pycharm 2017 * Python 3.5.4 ### 说明 仅使用python模块,实现了对bmp图片(仅对于24位图、灰度图)的读入、缩放、灰度化、旋转等功能。 程序中大部分功能只能作用于24位图。 对这个项目感兴趣的初学者,十分推荐阅读wiki中的[相关内容](https://en.wikipedia.org/wiki/BMP_file_format) 代码中的一些注释有我对一些细节的补充和一点思考。 ### 设计思路 如我之前所述,我最开始就完全针对24位图进行的开发,一来是24位图很有代表性,能较充分地学到一些东西,二来是对于色深小于等于8的位图,因为调色板的存在加大一些功能开发的难度。好在通过模块化地编程,之后对8位图做了一些微小的拓展,也不过是补充和修改一部分代码而已。 我们读入和写入(小端方式)比特数据,为了让这些数据能够直观地被我们使用,mytools中bytes2int、int2bytes提供的比特字节和int类型之间转换功能。 BitmapFileHeader类中属性读入文件信息头。 DIB类中属性读入文件信息头。 BmpData类中读入了像素数据和计算出了每行像素数据中填充的字节数量。定义了对24位图、8位图像素数据的读入。 为了训练模块化编程思想,再对三个类我用了多重继承,这种做法挺容易出错的,不是特别推荐。 对于像素数据,我是存入在了多维数组,生成图片也不过是文件头、像素数据的写入,中规中矩的操作。[How do I create a BMP file with pure Python? - Stack Overflow](https://stackoverflow.com/questions/8729459/how-do-i-create-a-bmp-file-with-pure-python)这篇问答提供的思路挺不错的。 至于缩放、灰度化、旋转的算法,可以参考下栏的资料,根据这些理论,将算法转换成代码即可。 ### 参考 [简单bmp图片处理工具——python实现](https://www.cnblogs.com/zyp4614/p/6917943.html) [OpenCV ——双线性插值(Bilinear interpolation)](https://www.cnblogs.com/yssongest/p/5303151.html) [双线性插值算法及需要注意事项](http://handspeaker.iteye.com/blog/1545126) [图像旋转算法原理-- 旋转矩阵](https://blog.csdn.net/liyuan02/article/details/6750828) ### 总结 这个项目锻炼了我挺多的,关于图像的知识,单单看看文档没什么,实际操作中才渐渐注意到细节,有把握说这个内容我是了解的。也了解了几个算法。 更明显的一方面是编程的能力,如何在空间和时间上达到较好的水平,如何把结构写得有逻辑,如何实现代码的复用,代码在底层的实现了哪些东西,这些都在项目中思考,实践中锻炼。虽然使用的是python,不必在语法上受苦,但不得不说灵活的语法把一些底层的东西封装起来,好用但又容易出错。 这个暑假,刚好也是我接触编程的第一年,从python到python,费时费力地克服了一些不值一提的困难,在路途上七弯八绕,好在确实学到了一些东西,改变了一点自身的性格和学习的方法,虽然做的不是很好,但还算值得。