三个练习过后,我感觉,最基础的图片操作,载入,写出,画直方图这些操作千篇一律,是时候将他们封装在一起了
封装的东西大致分为两类,图片的加载与输出以及直方图的建立与输出。
于是我将所有的操作都置于namespace ImageUtil
下
基本类型
1 | //色彩 |
读写操作
在这里,我将读写操作从Exercise1当中的fwrite,fread改为了cpp当中的iofstream,个人感觉更加方便
1 | //读取图片 |
由于和之前Exercise1与Exercise2的操作是一样的,因此也就不再赘述了。
转灰度图操作
而由于大部分的图片处理都是基于灰度图的,因此这里也封装了将24/32位图片输入然后直接输出8位图的操作,以便于之后的练习(这样可以直接输入24/32位图,而不是先使用Exercise1的代码操作改为8位图再使用)
1 | ImageUtil::ImageData ImageUtil::loadImageToGray(const std::string & path) |
其他封装
其实也就是一些比较常用的数学操作,目前我封装了3个,分别是对灰度值的约束函数clamp
以及ImageData
的加与乘操作
1 | int ImageUtil::clamp(const int c) |
至于还有没有后续的封装就看后面的练习所总结了。