Modifications

- Save in PNG instead of BMP (fixing memory lost)
- Use QuadTree class (not yet fully implemented)
- Add comments
This commit is contained in:
Mylloon 2022-05-08 17:32:53 +02:00
parent b5e5a448d2
commit 1014f64f2a
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -1,31 +1,34 @@
#include <SDL_image.h>
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include "../includes/quadtree.hpp"
// Enregistre une image au format PNG
void enregistrementImage(QuadTree, std::string, short);
int main(int argc, char const *argv[]) { int main(int argc, char const *argv[]) {
// Récupération informations sur l'image
if(argc != 2) { if(argc != 2) {
std::cerr << "Aucune image renseignée." << std::endl; std::cerr << "Aucune image renseignée." << std::endl;
std::cerr << "Usage : " << argv[0] << " image" << std::endl; std::cerr << "Usage : " << argv[0] << " image" << std::endl;
return 1; return 1;
} }
// Création d'une surface SDL à partir de l'image renseignée
SDL_Surface * s; SDL_Surface * s;
if((s = IMG_Load(argv[1])) == NULL) { if((s = IMG_Load(argv[1])) == NULL) {
std::cerr << "Impossible de charger l'image." << std::endl; std::cerr << "Impossible de charger l'image." << std::endl;
return 1; return 1;
} }
// TODO: Faire une vraie compression // Création du quadtree
/* if(SDL_LockSurface(s) == 0) { QuadTree quadtree(s);
SDL_memset(s->pixels, static_cast<int>(SDL_MapRGB(s->format, 0, 0, 0)), static_cast<size_t>(s->h * s->pitch));
SDL_UnlockSurface(s);
} else {
std::cerr << "Impossible de modifier l'image (" << SDL_GetError() << ")." << std::endl;
return 1;
} */
std::string chemin_image("resultat.bmp"); SDL_FreeSurface(s);
if(std::ifstream(chemin_image).is_open()) {
// Enregistrement du résultat
std::string chemin_image("resultat.png");
if(std::ifstream(chemin_image).is_open()) { // demande à l'utilisateur d'écraser ou non le fichier existant
char choix; char choix;
do { do {
std::cout << "Le fichier \""<< chemin_image << "\" existe déjà, voulez vous l'écraser ? y/n" << std::endl; std::cout << "Le fichier \""<< chemin_image << "\" existe déjà, voulez vous l'écraser ? y/n" << std::endl;
@ -33,14 +36,21 @@ int main(int argc, char const *argv[]) {
choix = tolower(choix); choix = tolower(choix);
} while(choix != 'n' && choix != 'y' && choix != 'o'); } while(choix != 'n' && choix != 'y' && choix != 'o');
if(choix == 'y' || choix == 'o') { if(choix == 'y' || choix == 'o') {
SDL_SaveBMP(s, chemin_image.c_str()); enregistrementImage(quadtree, chemin_image, 0);
} else { } else {
std::cout << "Passe..." << std::endl; std::cout << "Passe..." << std::endl;
} }
} else { } else {
SDL_SaveBMP(s, chemin_image.c_str()); enregistrementImage(quadtree, chemin_image, 0);
} }
SDL_FreeSurface(s);
return 0; return 0;
} }
void enregistrementImage(QuadTree quadtree, std::string chemin, short compression) {
SDL_Surface * img = quadtree.image(compression);
if(IMG_SavePNG(img, chemin.c_str()) != 0) {
std::cerr << "Impossible de sauvegarder l'image (" << SDL_GetError() << ")." << std::endl;
}
SDL_FreeSurface(img);
}