La compression RLE (Run-Length Encoding) remplace des séquences répétées par une représentation plus compacte. Ce TP introduit l'encapsulation d'un algorithme de traitement binaire dans une classe C++.
Réaliser une classe Compresseur qui implémente la compression/décompression RLE sur des fichiers binaires.
- classes et encapsulation ;
- flux binaires (
ifstream,ofstream) ; - algorithmes de parcours séquentiel ;
- gestion de fichiers.
- TP n°7 ;
- TP n°8 ;
- la compression RLE.
On désire créer une classe Compresseur déclarée dans le fichier compress.h et définie dans le fichier compress.cxx.
Le diagramme de classes UML est le suivant (fstream est une classe déclarée dans <fstream> et permet de gérer les fichiers de données) :
Les fonctions membres compresser et decompresser doivent répondre aux prototypes suivants :
void compresser(string fichierEntree, string fichierSortie);
void decompresser(string fichierEntree, string fichierSortie);
Donner en pseudolangage les algorithmes des fonctions compresser et decompresser. Justifier le choix du type de vos variables.
Implémenter en C++ la classe Compresseur.
Valider la classe en compressant le fichier test image.xpm. Le fichier destination sera nommé image.xp_. Éditer le fichier compressé et vérifier son intégrité. Décompresser image.xp_ en image2.xpm et relever le taux de compression obtenu.
Nous avons précédemment mesuré le taux de compression par une méthode contestable. Modifier la classe en conséquence pour permettre un calcul automatique du taux.
- Compilateur GNU C++ ;
- Système d'exploitation Linux, Mac OS X ou Ms-Windows ;
- Standard recommandé : C++11 ou supérieur.
Exemple :
- entrée :
image.xpm; - sortie intermédiaire :
image.xp_; - sortie finale après décompression :
image2.xpm.
Résultat attendu : image2.xpm identique à image.xpm.
g++ -std=c++11 -Wall -Wextra -o testcomp src/testcomp.cxx src/compress.cxxsrc/include/compress.h;src/compress.cxx;src/testcomp.cxx;README.md(compilation, protocole de test, taux observé).
- Ajouter des tests automatiques sur fichier vide et longues répétitions ;
- Ajouter un mode verbeux (statistiques de compression).
- Qualité et organisation des documents rendus (codes sources, fichier README, etc.) ;
- Exactitude de la compression/décompression ;
- Robustesse des traitements fichiers ;
- Autonomie.
