From 7d935a6d5bb6bd66f9afaec73e267ebfca82736c Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 9 May 2022 13:33:37 +0200 Subject: [PATCH] Handle custom level of compression --- README.md | 6 +++++- src/main.cpp | 29 +++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 71c1f9c..e02aa73 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,11 @@ Une fois dans le projet, pour compiler le programme, utilisez `make`. > **Nécessite `SDL2_image`**. ### Utilisation -- `./quadtree` lance le programme. +- `./quadtree [niveau de compression]` lance le programme. + +> Le niveau de compression est par défaut définie sur 7. +> +> Le niveau doit être compris entre 0 et 10 inclus. --- ## Infos diff --git a/src/main.cpp b/src/main.cpp index 405f995..7264876 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,9 +8,9 @@ void enregistrementImage(QuadTree, std::string, short); int main(int argc, char const *argv[]) { // Récupération informations sur l'image - if(argc != 2) { + if(argc != 2 && argc != 3) { std::cerr << "Aucune image renseignée." << std::endl; - std::cerr << "Usage : " << argv[0] << " image" << std::endl; + std::cerr << "Usage : " << argv[0] << " image [compression 1<->10]" << std::endl; return 1; } @@ -21,13 +21,23 @@ int main(int argc, char const *argv[]) { return 1; } + int niveau_compression = 7; + if(argc == 3) { + int compression_sugeree = std::stoi(argv[2]); + if(compression_sugeree >= 0 && compression_sugeree <= 10) { + niveau_compression = compression_sugeree; + } else { + std::cerr << "Le niveau de compression doit être entre 0 et 10 inclus." << std::endl; + return 1; + } + } + // Création du quadtree QuadTree quadtree(s); - - /* SDL_FreeSurface(s); */ + SDL_FreeSurface(s); // Enregistrement du résultat - std::string chemin_image("resultat.png"); + std::string chemin_image("resultat"); if(std::ifstream(chemin_image).is_open()) { // demande à l'utilisateur d'écraser ou non le fichier existant char choix; do { @@ -36,12 +46,12 @@ int main(int argc, char const *argv[]) { choix = tolower(choix); } while(choix != 'n' && choix != 'y' && choix != 'o'); if(choix == 'y' || choix == 'o') { - enregistrementImage(quadtree, chemin_image, 0); + enregistrementImage(quadtree, chemin_image, niveau_compression); } else { std::cout << "Passe..." << std::endl; } } else { - enregistrementImage(quadtree, chemin_image, 0); + enregistrementImage(quadtree, chemin_image, niveau_compression); } return 0; @@ -49,8 +59,11 @@ int main(int argc, char const *argv[]) { void enregistrementImage(QuadTree quadtree, std::string chemin, short compression) { SDL_Surface * img = quadtree.image(compression); + chemin += " " + std::to_string(compression) + ".png"; if(IMG_SavePNG(img, chemin.c_str()) != 0) { std::cerr << "Impossible de sauvegarder l'image (" << SDL_GetError() << ")." << std::endl; + } else { + std::cout << "Image compressé avec un niveau " << compression << " sous \"" << chemin << "\"." << std::endl; } - /* SDL_FreeSurface(img); */ + SDL_FreeSurface(img); }