Bonjour,
je cherche à implémenter un plug-in pour gimp2.2 qui segmente une image grâce au quadtree.
Je m'inspire d'un code java que j'avais déjà fait et qui marchait mais la transposition en langage C me pose probleme.
Voilà ma structure en C dans "quadtree.h":
struct QuadtreeNode{
struct QuadtreeNode *_fils[4];
int _x,_y,_l,_h;
int _feuille;//1:le noeud est une feuille; 0:le noeud a 4 fils
};
et voilà la méhode permettant d'instancier ce quadtree dans "quadtree.c" (elle est incomplete, elle me sert à tester le fonctionnement des structures) :
void quadtree_node(struct QuadtreeNode *quadtreeNode, int x, int y, int l, int h, int feuille){
quadtreeNode->_x = x;
quadtreeNode->_y = y;
quadtreeNode->_l = l;
quadtreeNode->_h = h;
quadtreeNode->_feuille = feuille;
if(!feuille){
///////////////////////////////////////////////////////////////////////////
// je suis obligé d'instancier le tableau de fils
// pour pouvoir m'en servir dans quadtree_node
// sinon j'ai une "erreur de segmentation"
///////////////////////////////////////////////////////////////////////////
struct QuadtreeNode fils_1;
struct QuadtreeNode fils_2;
struct QuadtreeNode fils_3;
struct QuadtreeNode fils_4;
quadtreeNode->_fils[0] = &fils_1;
quadtreeNode->_fils[1] = &fils_2;
quadtreeNode->_fils[2] = &fils_3;
quadtreeNode->_fils[3] = &fils_4;
/////////////////////////////////////////////////////////////////////////
quadtree_node(quadtreeNode->_fils[0], 5, 5, 10, 10, 1);
quadtree_node(quadtreeNode->_fils[1], 10, 5, 10, 10, 1);
quadtree_node(quadtreeNode->_fils[2], 45, 5, 10, 10, 1);
quadtree_node(quadtreeNode->_fils[3], 20, 30, 10, 10, 1);
}
}
et enfin voilà le "main.c" :
struct QuadtreeNode *quadtreeNode;
quadtree_node(quadtreeNode, 10, 10, 50, 50, 0);
// Je vais donc créer un noeud "quadtreeNode"
// et ses 4 fils puisque ce denier n'est pas une feuille
Et voilà mon probleme : lorsque j'affiche les fils à partir de la méthode quadtree_node, le résultat est bon :
x:5 y:5 l:10 h:10 feuille:1
x:10 y:5 l:10 h:10 feuille:1
x:45 y:5 l:10 h:10 feuille:1
x:20 y:30 l:10 h:10 feuille:1
MAIS lorsque j'affiche les fils dans le "main.c", voilà ce que j'ai :
x:10 y:1081323328 l:1081294528 h:-1073744664 feuille:1080482768
x:1081294528 y:-1073744716 l:1080513717 h:1081294528 feuille:1085218816
x:1081294528 y:1085218816 l:1 h:10 feuille:1081323328
x:130719474 y:1081323328 l:1080516335 h:1 feuille:1085218816
Quel est le probleme ? Pourquoi certaines valeurs sont instanciées et d'autres pas ?
Merci d'avance !!!