Лучший способ отображения 2D-векторов с помощью CImg

Как лучше всего отобразить 2D-матрицу с помощью CImg? Я пытаюсь использовать следующий код, но он дает мне ошибку сегментации:

    float matrix[100][100];
    int i;
    int j;

    for (i=0; i<100; i++) {
        for (j=0; j<100; j++) {
            matrix[i][j] = 10.0*sin((float)j/(2.0*3.1416));
        }
    }

    CImg<float> img(100,100,1,1);

    img._data = &matrix[0][0];
    img.display("Test");

Что я делаю неправильно?


person Jaime Ivan Cervantes    schedule 24.04.2014    source источник
comment
Я думаю, что это должна быть матрица [высота] [ширина]. Я знаю, что для вашего случая это не имеет значения, потому что ширина и высота одинаковы. Но для разного роста это будет проблемой.   -  person Tahlil    schedule 24.04.2014
comment
float matrix[width][height]; недопустимо в стандартном C++, размеры должны быть константами   -  person M.M    schedule 24.04.2014
comment
Вы правы, отредактировал.   -  person Jaime Ivan Cervantes    schedule 24.04.2014


Ответы (1)


То, что вы сделали, вероятно, не очень хорошая идея: деструктор ~CImg<T> попытается освободить буфер, связанный с вашим экземпляром CImg<T>, и, поскольку вы установили его значение равным matrix, у вас возникнут большие проблемы. Вместо этого я предлагаю использовать общие изображения, это эффективно (без дополнительной копии памяти) и безопасно для использования:

CImg<float> img(matrix,width,height,1,1,true);  // img is a 'shared' image.
img.display("Test");
person bvalabas    schedule 24.04.2014
comment
Общее изображение было именно тем, что я искал, но когда я использую ваш код, я получаю сообщение об ошибке instantiated from cimg_library::CImg<T>::CImg(const t*, unsigned int, unsigned int, unsigned int, unsigned int, bool) [with t = float [100], T = float] - person Jaime Ivan Cervantes; 24.04.2014
comment
Я решил это, используя CImg<float> img((const float*)matrix,width,height,1,1,true) - person Jaime Ivan Cervantes; 24.04.2014