diff --git a/README.md b/README.md index 49f7856..f5ee7b9 100644 --- a/README.md +++ b/README.md @@ -1,174 +1,119 @@ -# Projet : Primitive Image Format (PIF) - -## Description générale - -Ce projet consiste à implémenter un nouveau format d’image compressé sans perte, appelé **PIF (Primitive Image Format)**, inspiré du format JFIF. -Il s'appuie sur la création de tables de fréquences, de codes de Huffman, de codes canoniques et sur la manipulation binaire afin de réduire la taille des images. - -Deux programmes Java doivent être développés : - -1. **Visualisateur PIF** - Programme capable d’ouvrir un fichier `.pif` et d’afficher l’image dans une interface graphique. - -2. **Convertisseur vers PIF** - Programme permettant de charger une image classique (ImageIO), de générer ses tables de fréquences et codes associés, puis de produire un fichier `.pif`. - -Ce travail doit être réalisé en binôme ou trinôme. - ---- - -## Deadline - -**Date limite de rendu : dimanche 11 janvier 2025 à 23h59.** -Toutes les sources doivent être présentes sur le serveur Gitea du département dans un dépôt privé nommé **SAE32_2025**. - ---- - -## Fonctionnalités attendues - -### 1. Visualisateur `.pif` - -- Lecture du fichier `.pif` via argument de ligne de commande ou `JFileChooser`. -- Décodage : - - de l’en-tête (largeur, hauteur), - - des trois tables canoniques (R, G, B), - - des données binaires des pixels. -- Affichage graphique sous Swing : - - fenêtre redimensionnable, - - image centrée si petite, - - image déplaçable à la souris si trop grande. - ---- - -### 2. Convertisseur vers format `.pif` - -- Chargement d'une image via `ImageIO.read()`. -- Extraction : - - des tables de fréquences, - - des codes Huffman initiaux, - - des codes canoniques triés. -- Affichage des tables pour inspection. -- Génération du fichier `.pif` : - - en-tête, - - tables canoniques compactes, - - données binaires des pixels encodés. -- Le deuxième argument de ligne de commande peut définir le nom du fichier `.pif`. - ---- - -## Structure du format PIF - -Un fichier `.pif` contient trois sections : - -1. **En-tête (4 octets)** - - largeur (2 octets) - - hauteur (2 octets) - -2. **Tables canoniques (768 octets)** - Trois tables successives de 256 octets : rouge, vert, bleu. - Chaque octet indique la longueur du code canonique d’une valeur entre 0 et 255. - -3. **Section pixels (à partir du 773e octet)** - Les trois composantes (R, G, B) sont encodées via leurs codes canoniques respectifs. - Les bits sont packés de manière contiguë. - ---- - -## Processus de compression - -### 1. Création des tables de fréquences - -Pour R, G et B : compter combien de fois chaque valeur apparaît dans l’image. - -### 2. Construction des codes Huffman - -- Un arbre est construit par composante. -- Les valeurs les plus fréquentes reçoivent les codes les plus courts. -- Les codes initiaux peuvent varier en longueur. - -### 3. Génération des codes canoniques - -- Tri des valeurs par longueur de code puis par valeur. -- Premier code : rempli de zéros. -- Les suivants sont obtenus par incrément binaire. -- Permet une reconstruction simple côté visualisateur. - ---- - -## Architecture logicielle - -Le projet doit inclure : - -- un package Java unique, -- toutes les classes nécessaires au traitement : - - gestion du fichier PIF, - - lecture/écriture binaire, - - génération des fréquences, - - Huffman, - - codes canoniques, - - interface graphique, - - programme principal du visualisateur, - - programme principal du convertisseur. -- un `Makefile` générant deux exécutables `.jar`. - ---- - -## Classes Java - -Les classes Java utilisées dans le projet : - -- [BitinputStream](src/fr/iutfbleau/sae/util/BitinputStream.java) -- [BitOutputStream](src/fr/iutfbleau/sae/util/BitOutputStream.java) -- [ByteUtils](src/fr/iutfbleau/sae/util/ByteUtils.java) -- [CanonicalCode](src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java) -- [FrequencyTable](src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java) -- [HuffmanNode](src/fr/iutfbleau/sae/mhuffman/HuffmanNode.java) -- [HuffmanTree](src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java) - ---- - -## Rapport à produire - -Un rapport PDF doit contenir : - -- noms des membres du groupe, -- introduction résumant le sujet, -- description des fonctionnalités du programme, -- captures d’écran, -- diagrammes UML simplifiés, -- explication du compresseur (Huffman, canoniques, structure du fichier), -- explication du décompresseur, -- conclusion personnelle de chaque membre. - -Le rapport ne doit pas contenir de code source. - ---- - -## Compilation et exécution - -### Visualisateur - java -jar pif-viewer.jar chemin/image.pif - - -### Convertisseur - java -jar pif-converter.jar image.png sortie.pif - - -Si aucun argument n’est fourni, un `JFileChooser` est ouvert. - ---- - - -- Les commits, leur fréquence et la collaboration seront pris en compte dans la note. - ---- - -## Auteurs - -- Algassimou Pellel DIALLO -- Ayoub ANHDIRE -- Youness BOULALAME - -## Enseignant -- Luc HERNANDEZ - +# Projet : Primitive Image Format (PIF) + +## Description générale + +Ce projet consiste à implémenter un nouveau format d’image compressé sans perte, appelé **PIF (Primitive Image Format)**, inspiré du format JFIF. +Il s'appuie sur la création de tables de fréquences, de codes de Huffman, de codes canoniques et sur la manipulation binaire afin de réduire la taille des images. + +Deux programmes Java doivent être développés : + +1. **Visualisateur PIF** + Programme capable d’ouvrir un fichier `.pif` et d’afficher l’image dans une interface graphique. + +2. **Convertisseur vers PIF** + Programme permettant de charger une image classique (ImageIO), de générer ses tables de fréquences et codes associés, puis de produire un fichier `.pif`. + +Ce travail doit être réalisé en binôme ou trinôme. + +--- + +## Deadline + +**Date limite de rendu : dimanche 11 janvier 2025 à 23h59.** + +--- + +## Fonctionnalités attendues + +### 1. Visualisateur `.pif` + +- Lecture du fichier `.pif` via argument de ligne de commande ou `JFileChooser`. +- Décodage : + - de l’en-tête (largeur, hauteur), + - des trois tables canoniques (R, G, B), + - des données binaires des pixels. +- Affichage graphique sous Swing : + - fenêtre redimensionnable, + - image centrée si petite, + - image déplaçable à la souris si trop grande. + +--- + +### 2. Convertisseur vers format `.pif` + +- Chargement d'une image via `ImageIO.read()`. +- Extraction : + - des tables de fréquences, + - des codes Huffman initiaux, + - des codes canoniques triés. +- Affichage des tables pour inspection. +- Génération du fichier `.pif` : + - en-tête, + - tables canoniques compactes, + - données binaires des pixels encodés. +- Le deuxième argument de ligne de commande peut définir le nom du fichier `.pif`. + +--- + +## Structure du format PIF + +Un fichier `.pif` contient trois sections : + +1. **En-tête (4 octets)** + - largeur (2 octets) + - hauteur (2 octets) + +2. **Tables canoniques (768 octets)** + Trois tables successives de 256 octets : rouge, vert, bleu. + Chaque octet indique la longueur du code canonique d’une valeur entre 0 et 255. + +3. **Section pixels (à partir du 773e octet)** + Les trois composantes (R, G, B) sont encodées via leurs codes canoniques respectifs. + Les bits sont packés de manière contiguë. + + +## Rapport à produire + +Un rapport PDF doit contenir : + +- noms des membres du groupe, +- introduction résumant le sujet, +- description des fonctionnalités du programme, +- captures d’écran, +- diagrammes UML simplifiés, +- explication du compresseur (Huffman, canoniques, structure du fichier), +- explication du décompresseur, +- conclusion personnelle de chaque membre. + +Le rapport ne doit pas contenir de code source. + +--- + +## Compilation et exécution + +### Visualisateur + java -jar pif-viewer.jar chemin/image.pif + + +### Convertisseur + java -jar pif-converter.jar image.png sortie.pif + + +Si aucun argument n’est fourni, un `JFileChooser` est ouvert. + +--- + + +- Les commits, leur fréquence et la collaboration seront pris en compte dans la note. + +--- + +## Auteurs + +- Algassimou Pellel DIALLO +- Ayoub ANHDIRE +- Youness BOULALAME + +## Enseignant +- Luc HERNANDEZ +