我有一个二维数组,我想通过生成一个图像来缩放和可视化它。我尝试了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 ++来形象化它。