use format instead of masks
This commit is contained in:
parent
0f56b3386d
commit
d5c26f66d3
2 changed files with 10 additions and 17 deletions
|
@ -25,6 +25,9 @@ class QuadTree {
|
||||||
// Est vrai si l'on ne doit pas diviser la surface
|
// Est vrai si l'on ne doit pas diviser la surface
|
||||||
bool final;
|
bool final;
|
||||||
|
|
||||||
|
// Format de l'image (SDL_PixelFormatEnum)
|
||||||
|
Uint32 format;
|
||||||
|
|
||||||
// Calcule la couleur qui apparaît majoritairement dans la surface
|
// Calcule la couleur qui apparaît majoritairement dans la surface
|
||||||
SDL_Color calculeCouleur(SDL_Surface *);
|
SDL_Color calculeCouleur(SDL_Surface *);
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,10 @@
|
||||||
#include "../includes/quadtree.hpp"
|
#include "../includes/quadtree.hpp"
|
||||||
|
|
||||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
||||||
Uint32 r_mask = 0xff000000;
|
|
||||||
Uint32 g_mask = 0x00ff0000;
|
|
||||||
Uint32 b_mask = 0x0000ff00;
|
|
||||||
Uint32 a_mask = 0x000000ff;
|
|
||||||
#else
|
|
||||||
Uint32 r_mask = 0x000000ff;
|
|
||||||
Uint32 g_mask = 0x0000ff00;
|
|
||||||
Uint32 b_mask = 0x00ff0000;
|
|
||||||
Uint32 a_mask = 0xff000000;
|
|
||||||
#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) {
|
final(true), format(SDL_PIXELFORMAT_RGB888) {
|
||||||
|
// *reinterpret_cast<Uint32 *>(image->format)
|
||||||
|
// SDL_PIXELFORMAT_RGB888 -> noir et blanc
|
||||||
if(!verificationEgalitee(image)) {
|
if(!verificationEgalitee(image)) {
|
||||||
std::array<SDL_Surface *, 4> image_coupe = coupeEnQuatre(image);
|
std::array<SDL_Surface *, 4> image_coupe = coupeEnQuatre(image);
|
||||||
|
|
||||||
|
@ -28,7 +18,7 @@ QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), coule
|
||||||
|
|
||||||
SDL_Surface * QuadTree::image(short niveau_p) {
|
SDL_Surface * QuadTree::image(short niveau_p) {
|
||||||
if(final || niveau == niveau_p) {
|
if(final || niveau == niveau_p) {
|
||||||
SDL_Surface * couleur_unie = SDL_CreateRGBSurface(0, dimensions.first, dimensions.second, 32, r_mask, g_mask, b_mask, a_mask);
|
SDL_Surface * couleur_unie = SDL_CreateRGBSurfaceWithFormat(0, dimensions.first, dimensions.second, 32, format);
|
||||||
if(SDL_LockSurface(couleur_unie) == 0) {
|
if(SDL_LockSurface(couleur_unie) == 0) {
|
||||||
SDL_memset(couleur_unie->pixels, static_cast<int>(
|
SDL_memset(couleur_unie->pixels, static_cast<int>(
|
||||||
SDL_MapRGBA(couleur_unie->format, couleur.r, couleur.g, couleur.b, 255)
|
SDL_MapRGBA(couleur_unie->format, couleur.r, couleur.g, couleur.b, 255)
|
||||||
|
@ -116,10 +106,10 @@ std::array<SDL_Surface *, 4> QuadTree::coupeEnQuatre(SDL_Surface * s) {
|
||||||
// Création d'une nouvelle surface
|
// Création d'une nouvelle surface
|
||||||
// Copie pixel par pixel de la surface mère vers la surface fille
|
// Copie pixel par pixel de la surface mère vers la surface fille
|
||||||
// Stockage de la nouvelle surface dans l'array `resultat`
|
// Stockage de la nouvelle surface dans l'array `resultat`
|
||||||
SDL_Surface * nouvelle_image = SDL_CreateRGBSurface(0,
|
SDL_Surface * nouvelle_image = SDL_CreateRGBSurfaceWithFormat(0,
|
||||||
coordonnes_quadrants[i][2] - coordonnes_quadrants[i][0],
|
coordonnes_quadrants[i][2] - coordonnes_quadrants[i][0],
|
||||||
coordonnes_quadrants[i][3] - coordonnes_quadrants[i][1],
|
coordonnes_quadrants[i][3] - coordonnes_quadrants[i][1],
|
||||||
32, r_mask, g_mask, b_mask, a_mask);
|
32, format);
|
||||||
|
|
||||||
if(SDL_LockSurface(nouvelle_image) == 0) {
|
if(SDL_LockSurface(nouvelle_image) == 0) {
|
||||||
for(int x = 0; x < nouvelle_image->w; ++x) {
|
for(int x = 0; x < nouvelle_image->w; ++x) {
|
||||||
|
@ -168,7 +158,7 @@ SDL_Surface * QuadTree::colleQuatreImages(std::array<SDL_Surface *, 4> morceaux)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Surface * nouvelle_image = SDL_CreateRGBSurface(0, largeur, hauteur, 32, r_mask, g_mask, b_mask, a_mask);
|
SDL_Surface * nouvelle_image = SDL_CreateRGBSurfaceWithFormat(0, largeur, hauteur, 32, format);
|
||||||
|
|
||||||
// Copie chacun son tour les morceaux d'image dans l'image
|
// Copie chacun son tour les morceaux d'image dans l'image
|
||||||
if(SDL_LockSurface(nouvelle_image) == 0) {
|
if(SDL_LockSurface(nouvelle_image) == 0) {
|
||||||
|
|
Reference in a new issue