use format instead of masks

This commit is contained in:
Mylloon 2022-05-09 15:48:04 +02:00
parent 0f56b3386d
commit d5c26f66d3
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 10 additions and 17 deletions

View file

@ -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 *);

View file

@ -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) {