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:
parent
d13ee8c861
commit
9e89f0f943
2 changed files with 25 additions and 16 deletions
|
@ -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 *);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue