Modifications

- Define final variable in the constructor
- Modifications on dimensions calculation when concatenation
- Save latest piece of quadtree before crash (debug)
This commit is contained in:
Mylloon 2022-05-09 12:59:09 +02:00
parent d13ee8c861
commit 9e89f0f943
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 25 additions and 16 deletions

View file

@ -16,15 +16,15 @@ class QuadTree {
// Dimensions du morceau de l'image // Dimensions du morceau de l'image
std::pair<short, short> dimensions; std::pair<short, short> dimensions;
// Est vrai si l'on ne doit pas diviser l'image
bool final = true;
// Morceaux de l'image // Morceaux de l'image
QuadTree * nord_ouest; QuadTree * nord_ouest;
QuadTree * nord_est; QuadTree * nord_est;
QuadTree * sud_ouest; QuadTree * sud_ouest;
QuadTree * sud_est; 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 // Calcule la couleur qui apparaît majoritairement dans l'image
SDL_Color calculeCouleur(SDL_Surface *); SDL_Color calculeCouleur(SDL_Surface *);

View file

@ -13,7 +13,8 @@
#endif #endif
QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), couleur(calculeCouleur(image)), dimensions(image->w, image->h), 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)) { if(!verificationEgalitee(image)) {
std::array<SDL_Surface *, 4> image_coupe = coupeEnQuatre(image); std::array<SDL_Surface *, 4> 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); sud_ouest = new QuadTree(image_coupe.at(1), niveau + 1);
nord_est = new QuadTree(image_coupe.at(2), niveau + 1); nord_est = new QuadTree(image_coupe.at(2), niveau + 1);
sud_est = new QuadTree(image_coupe.at(3), 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<SDL_Surface *, 4> QuadTree::coupeEnQuatre(SDL_Surface * s) {
return resultat; return resultat;
} }
#include <string>
SDL_Surface * QuadTree::colleQuatreImages(std::array<SDL_Surface *, 4> morceaux) { SDL_Surface * QuadTree::colleQuatreImages(std::array<SDL_Surface *, 4> morceaux) {
// Récupère la hauteur/largeur de l'image qui est composé des 4 sous-images // 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) // Double les dimensions des morceaux en diagonale (ici NO et SE)
@ -165,17 +163,21 @@ SDL_Surface * QuadTree::colleQuatreImages(std::array<SDL_Surface *, 4> morceaux)
// Si dimensions différente alors on prend l'entre-deux // Si dimensions différente alors on prend l'entre-deux
if(largeur == -1) { if(largeur == -1) {
if(morceaux[0]->w * 2 > morceaux[3]->w * 2) { int double_NO = morceaux[0]->w * 2;
largeur = morceaux[0]->w * 2 - 1; int double_SE = morceaux[3]->w * 2;
if(double_NO > double_SE) {
largeur = double_NO - 1;
} else { } else {
largeur = morceaux[3]->w * 2 - 1; largeur = double_SE- 1;
} }
} }
if(hauteur == -1) { if(hauteur == -1) {
if(morceaux[0]->h * 2 > morceaux[3]->h * 2) { int double_NO = morceaux[0]->h * 2;
hauteur = morceaux[0]->h * 2 - 1; int double_SE = morceaux[3]->h * 2;
if(double_NO > double_SE) {
hauteur = double_NO - 1;
} else { } else {
hauteur = morceaux[3]->h * 2 - 1; hauteur = double_SE - 1;
} }
} }
@ -213,9 +215,16 @@ SDL_Surface * QuadTree::colleQuatreImages(std::array<SDL_Surface *, 4> morceaux)
SDL_UnlockSurface(nouvelle_image); 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); SDL_FreeSurface(it);
} */ }
return nouvelle_image; return nouvelle_image;
} }