首先先介绍C++中图像数据分配内存方法。
在计算机中图像是一个二维的数字点阵。
比较容易想到的是申请一个二维矩阵来存储图像
如:
BYTE image[512][512];
可以存储一幅512*512个像素的图像,每个像素用一个字节表示,一个字节能表示0-255共256个不同取值。所以这一二维数组比较合适存储灰度图像。
对于二维彩色图像,如果每个像素分别有R,G,B
3个颜色分量,则可以用如下的方式分配二维数组。
struct RGB{
BYTE r;
BYTE g;
BYTE b;
};
RGB image[512][512];
但是分配二维数组有一个致命缺点,就是不能分配占用空间较大的数组,如imgae【5000】【5000】。
所以,比较好的二维图像内存分配方法可用以下思想:
BYTE
*imgae[5000];
for(int
i=0;i<512;i++)
{
image[i]=new unsigned char[5000];
}
,以上代码实际就是创建一个二维数组,image[i][j]表示二维数组的第i行第j列。存储图像第i行第j列个像素。
BMP文件组成分为:
{
HEADER
BITMAPFILEHEADER
BITMAPINFOHEADER
RGBQUAD
DATA
}