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`**.
|
> **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
|
||||||
|
|
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[]) {
|
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);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue