在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像。
前提
我们不需要知道这段代码是如何读取bmp格式图像的,不需要知道bmp格式的图像时如何存储的,我们只需要知道有三个参数可以确定图像的尺寸大小,他们是图像的宽度、高度、通道数(例如灰度图像有一个通道,rgb图像有三个通道(rgb))。图像包含高度X宽度个像素,每个像素有相同的通道,他们在内存中按照一定的顺序存储,例如三通道bmp图像,在内存中图像行存储,第一个像素存储图像左下角的像素,第二个像素存储图像左下角向右移动一个单位后的像素,依次类推。
读图像操作
函数定义如下:
bool abReadImage(int &rows, int &cols, int &nChannels, io_byte *&imData, const char *imFileName)
{
imData = NULL;
int err_code=0;
try {
int n;
bmp_in in;
if ((err_code = bmp_in__open(&in,imFileName)) != 0)
throw err_code;
cols = in.cols; rows = in.rows; nChannels = in.num_components;
io_byte *dp;
imData = new io_byte[cols*rows*nChannels]