2014-04-24 1 views
0

Quelle est la meilleure façon d'afficher une matrice 2D en utilisant CImg? J'essaye le code suivant mais il me donne un défaut de segmentation:Meilleure façon d'afficher des vecteurs 2D avec 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"); 

Qu'est-ce que je fais mal?

+1

je pense que ce devrait être la matrice [hauteur] [largeur]. Je sais que pour votre cas, cela n'a pas d'importance parce que la largeur et la hauteur sont les mêmes. Mais pour une hauteur différente, ce sera un problème. – Tahlil

+1

'float matrix [largeur] [hauteur];' est illégal en C++ standard, les dimensions doivent être constantes –

+0

Vous avez raison, édité. –

Répondre

1

Ce que vous avez est probablement pas une bonne idée: Le destructor ~CImg<T> va essayer de dealloc le tampon associé à votre CImg<T> par exemple, et que vous avez forcé sa valeur à matrix, vous entrerez dans de gros problèmes. Je suggère d'utiliser des images construites à la place, il est efficace (pas de copie de la mémoire supplémentaire) et sûr à utiliser:

CImg<float> img(matrix,width,height,1,1,true); // img is a 'shared' image. 
img.display("Test"); 
+0

L'image partagée était exactement ce que je cherchais, mais quand j'utilise votre code, j'obtiens une erreur qui dit 'instancié de cimg_library :: CImg :: CImg (const t *, entier non signé, entier non signé, entier non signé, entier non signé , bool) [avec t = float [100], T = float] ' –

+0

Je l'ai résolu en utilisant' CImg img ((const float *) matrice, largeur, hauteur, 1,1, true) ' –

Questions connexes