Handle custom level of compression

This commit is contained in:
Mylloon 2022-05-09 13:33:37 +02:00
parent 00fc4df7ca
commit 7d935a6d5b
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 26 additions and 9 deletions

View file

@ -27,7 +27,11 @@ Une fois dans le projet, pour compiler le programme, utilisez `make`.
> **Nécessite `SDL2_image`**. > **Nécessite `SDL2_image`**.
### Utilisation ### Utilisation
- `./quadtree` lance le programme. <!-- TODO --> - `./quadtree <image> [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 ## Infos

View file

@ -8,9 +8,9 @@ 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 // 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 << "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; return 1;
} }
@ -21,13 +21,23 @@ int main(int argc, char const *argv[]) {
return 1; 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 // Création du quadtree
QuadTree quadtree(s); QuadTree quadtree(s);
SDL_FreeSurface(s);
/* SDL_FreeSurface(s); */
// Enregistrement du résultat // 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 if(std::ifstream(chemin_image).is_open()) { // demande à l'utilisateur d'écraser ou non le fichier existant
char choix; char choix;
do { do {
@ -36,12 +46,12 @@ 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') {
enregistrementImage(quadtree, chemin_image, 0); enregistrementImage(quadtree, chemin_image, niveau_compression);
} else { } else {
std::cout << "Passe..." << std::endl; std::cout << "Passe..." << std::endl;
} }
} else { } else {
enregistrementImage(quadtree, chemin_image, 0); enregistrementImage(quadtree, chemin_image, niveau_compression);
} }
return 0; return 0;
@ -49,8 +59,11 @@ int main(int argc, char const *argv[]) {
void enregistrementImage(QuadTree quadtree, std::string chemin, short compression) { void enregistrementImage(QuadTree quadtree, std::string chemin, short compression) {
SDL_Surface * img = quadtree.image(compression); SDL_Surface * img = quadtree.image(compression);
chemin += " " + std::to_string(compression) + ".png";
if(IMG_SavePNG(img, chemin.c_str()) != 0) { if(IMG_SavePNG(img, chemin.c_str()) != 0) {
std::cerr << "Impossible de sauvegarder l'image (" << SDL_GetError() << ")." << std::endl; 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);
} }