Handle custom level of compression
This commit is contained in:
parent
00fc4df7ca
commit
7d935a6d5b
2 changed files with 26 additions and 9 deletions
|
@ -27,7 +27,11 @@ Une fois dans le projet, pour compiler le programme, utilisez `make`.
|
|||
> **Nécessite `SDL2_image`**.
|
||||
|
||||
### 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
|
||||
|
|
29
src/main.cpp
29
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);
|
||||
}
|
||||
|
|
Reference in a new issue