发现各种找到的库都非常巨大,抽象层次也很高,不能满足需求
自己刚写了一个C++读写bmp的类,支持8位灰度图,24位RGB图。
https://github.com/edimetia3d/simpleBMP
代码很短,其实看源码10分钟就了解干了些什么。
简要说明一下:
没有任何抽象,读取就是把bmp里的所有数据(是的,每个字节都用上了)都映射到某个定义过的变量。
保存就是把这些变量再写回磁盘。
其实最初是打算完全按照C来写的,对动态内存不太感冒,所以用了vector
读写部分用的还是fread fwrite,把vector的部分换成动态内存就完全可以在C下运行了。
每个变量的意思见
http://www.cnblogs.com/xiekeli/archive/2012/05/09/2491191.html
具体映射关系如下。
class ClImgBMP {
public:
ClBitMapFileHeader bmpFileHeaderData;
ClBitMapInfoHeader bmpInfoHeaderData;
ClrgbMap colorMap[256];
vector<unsigned char> imgData;
bool LoadImage(const char* path);
bool SaveImage(const char* path);
};