通过输出图像可视化C ++ 2d数组

时间:2015-07-16 19:14:58

标签: c++ arrays image bmp

我有一个二维数组,我想通过生成一个图像来缩放和可视化它。我尝试了EasyBMP库并编写了以下代码

#include "EasyBMP.h"
void visulize2DArray(double **data, int dim1, int dim2, const char* filename)           {
        double min = data[0][0];
        double max = data[0][0];
        for( int i=0 ; i < dim1; i++ )
        {
            for( int j=0; j < dim2 ; j++ )
            {
                if( data[i][j] < min )
                    { min = data[i][j]; }
                if( data[i][j] > max )
                    { max = data[i][j]; }
            }
        }
        BMP Output;
        Output.SetSize(dim1,dim2);
        Output.SetBitDepth(8);
        // plot the pixels
        for( int i=0 ; i < dim1 ; i++ )
        {   
            for( int j=0; j < dim2 ; j++ )
            {
                double scaled_value = ( data[i][j] - min )/( max-min + 1e-16 );
                int pixel_value = (int) floor(scaled_value * 255.0);
                BYTE val = (BYTE) pixel_value;
                Output(i,j)->Red = val; 
                Output(i,j)->Green = val;
                Output(i,j)->Blue = val;
                Output(i,j)->Alpha = 0;
            }
        }
        // save the file
        Output.WriteToFile( filename );
}

我使用上面的函数来生成图像,但是,生成的BMP文件非常大:超过200M(大约10,000 * 10,000图像大小),并且无法打开。我想看看它是否是图像大小的问题,所以我尝试用一​​个小的2d数组进行测试:

double **testImg;
testImg = new double*[100];
for(int i = 0; i < 100; ++i)
    testImg[i] = new double[100];
for (int i=0; i<100; ++i)
    for (int j=0; j<100; ++j)
    {
        testImg[i][j]=j;
    }
visulize2DArray(testImg, 100, 100, "Ctest.bmp");

但是,生成的bmp文件仍然无法打开。我使用EasyBMP 1.0版本,因为它易于使用:我只需要包含头文件,不需要编译等等。

我的问题是:有没有其他简单的方法可以在C ++中按图像显示二维数组?我知道我可以导出值并保存到文件然后使用其他工具。但我需要用C ++来形象化它。

0 个答案:

没有答案