50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
|
#ifndef COMPRESSION_QUADTREE_HPP
|
||
|
#define COMPRESSION_QUADTREE_HPP 1
|
||
|
|
||
|
#include <SDL_image.h>
|
||
|
#include <array>
|
||
|
|
||
|
class QuadTree {
|
||
|
// Niveau de profondeur du morceau de l'image
|
||
|
// 0 -> image de base
|
||
|
// 10 -> image coupé en 4
|
||
|
short niveau;
|
||
|
|
||
|
// La couleur qui est représentée
|
||
|
SDL_Color couleur;
|
||
|
|
||
|
// 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;
|
||
|
|
||
|
// Calcule la couleur qui apparaît majoritairement dans l'image
|
||
|
SDL_Color calculeCouleur(SDL_Surface *);
|
||
|
|
||
|
// Vérifie si l'ont doit encore diviser l'image
|
||
|
bool verificationEgalitee(SDL_Surface *);
|
||
|
|
||
|
// Coupe l'image en 4
|
||
|
std::array<SDL_Surface *, 4> coupeEnQuatre(SDL_Surface *);
|
||
|
|
||
|
// Colle 4 images en une seule
|
||
|
SDL_Surface * colleQuatreImages(std::array<SDL_Surface *, 4>);
|
||
|
|
||
|
public:
|
||
|
QuadTree(SDL_Surface *, short = 0);
|
||
|
|
||
|
~QuadTree(void);
|
||
|
|
||
|
// Renvoie l'image compressée
|
||
|
SDL_Surface * image(short);
|
||
|
};
|
||
|
|
||
|
#endif
|