将.bmp(24位)读入2D数组

时间:2013-05-28 07:37:07

标签: c++ arrays bmp

我是一个完全的初学者。我会尽力解释自己。

int i, j;
string filename;
cout << "Please enter the file name: " << endl; 
cin >> filename; 
fstream stream;

stream.open(filename.c_str(), 
    ios::in|ios::out|ios::binary);

int file_size = get_int(stream, 2); 
int start = get_int(stream, 10); 
int width = get_int(stream, 18); 
int height = get_int(stream, 22);

这部分应该得到文件及其值。

for ( i = 0; i < height; i++ )
    {
        for ( j = 0; j < width; j++)
        {
            for (int k = 0; k < split*split; k++){

                int pos = stream.tellg();
                int blue = stream.get(); 
                int green = stream.get(); 
                int red = stream.get();

这到达每个像素内部并获得RBG值。

我想要的是先将RBG值存储到2D数组中,然后对该数组进行一些操作。然后我想创建一个带有被操纵图像的新文件。

我不知道所以一些说明和一些代码会非常有用。

2 个答案:

答案 0 :(得分:0)

这个库非常易于使用http://easybmp.sourceforge.net/。加载文件后,U可以轻松检查RGB值。

答案 1 :(得分:0)

许多地方都记录了Bmp文件格式。例如,on wikipedia

最简单的方法是实现描述bmp标头的结构,并一次读取整个结构,然后读取单个像素。

您的阅读功能已损坏且无法正常运行,因为您没有读取文件签名 - 标题的“BM”字段。

在某些操作系统上,所有已经存在用于读取BMP的条带和功能。在Windows上,有BITMAPFILEHEADER。使用这些结构意味着您不使用“纯C ++”。

如果你还想自己阅读BMP,请阅读msdn文章aboud bmp或谷歌阅读“阅读bmp文件”教程。