diff --git a/includes/quadtree.hpp b/includes/quadtree.hpp index dc7779b..31106af 100644 --- a/includes/quadtree.hpp +++ b/includes/quadtree.hpp @@ -16,15 +16,15 @@ class QuadTree { // Dimensions du morceau de l'image std::pair dimensions; - // Est vrai si l'on ne doit pas diviser l'image - bool final = true; - // Morceaux de l'image QuadTree * nord_ouest; QuadTree * nord_est; QuadTree * sud_ouest; QuadTree * sud_est; + // Est vrai si l'on ne doit pas diviser l'image + bool final; + // Calcule la couleur qui apparaît majoritairement dans l'image SDL_Color calculeCouleur(SDL_Surface *); diff --git a/src/quadtree.cpp b/src/quadtree.cpp index 4be953c..17690fd 100644 --- a/src/quadtree.cpp +++ b/src/quadtree.cpp @@ -13,7 +13,8 @@ #endif QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), couleur(calculeCouleur(image)), dimensions(image->w, image->h), - nord_ouest(nullptr), nord_est(nullptr), sud_ouest(nullptr), sud_est(nullptr) { + nord_ouest(nullptr), nord_est(nullptr), sud_ouest(nullptr), sud_est(nullptr), + final(true) { if(!verificationEgalitee(image)) { std::array image_coupe = coupeEnQuatre(image); @@ -22,10 +23,6 @@ QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), coule sud_ouest = new QuadTree(image_coupe.at(1), niveau + 1); nord_est = new QuadTree(image_coupe.at(2), niveau + 1); sud_est = new QuadTree(image_coupe.at(3), niveau + 1); - - /* for(SDL_Surface * it: image_coupe) { - SDL_FreeSurface(it); - } */ } } @@ -157,6 +154,7 @@ std::array QuadTree::coupeEnQuatre(SDL_Surface * s) { return resultat; } +#include SDL_Surface * QuadTree::colleQuatreImages(std::array morceaux) { // Récupère la hauteur/largeur de l'image qui est composé des 4 sous-images // Double les dimensions des morceaux en diagonale (ici NO et SE) @@ -165,17 +163,21 @@ SDL_Surface * QuadTree::colleQuatreImages(std::array morceaux) // Si dimensions différente alors on prend l'entre-deux if(largeur == -1) { - if(morceaux[0]->w * 2 > morceaux[3]->w * 2) { - largeur = morceaux[0]->w * 2 - 1; + int double_NO = morceaux[0]->w * 2; + int double_SE = morceaux[3]->w * 2; + if(double_NO > double_SE) { + largeur = double_NO - 1; } else { - largeur = morceaux[3]->w * 2 - 1; + largeur = double_SE- 1; } } if(hauteur == -1) { - if(morceaux[0]->h * 2 > morceaux[3]->h * 2) { - hauteur = morceaux[0]->h * 2 - 1; + int double_NO = morceaux[0]->h * 2; + int double_SE = morceaux[3]->h * 2; + if(double_NO > double_SE) { + hauteur = double_NO - 1; } else { - hauteur = morceaux[3]->h * 2 - 1; + hauteur = double_SE - 1; } } @@ -213,9 +215,16 @@ SDL_Surface * QuadTree::colleQuatreImages(std::array morceaux) SDL_UnlockSurface(nouvelle_image); } - /* for(auto it: morceaux) { + // Temporaire + for(Uint32 i = 0; i < morceaux.size(); ++i) { + std::string chemin = std::to_string(i) + ".png"; + IMG_SavePNG(morceaux[i], chemin.c_str()); + } + IMG_SavePNG(nouvelle_image, "4.png"); + + for(auto it: morceaux) { SDL_FreeSurface(it); - } */ + } return nouvelle_image; }