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
|
||||
std::pair<short, short> 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 *);
|
||||
|
||||
|
|
|
@ -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<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);
|
||||
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<SDL_Surface *, 4> QuadTree::coupeEnQuatre(SDL_Surface * s) {
|
|||
return resultat;
|
||||
}
|
||||
|
||||
#include <string>
|
||||
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
|
||||
// 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
|
||||
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<SDL_Surface *, 4> 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;
|
||||
}
|
||||
|
|
Reference in a new issue