From 664f3f19981202b7fcd584c2731005086656edce Mon Sep 17 00:00:00 2001 From: AlgaLaptop Date: Sun, 7 Dec 2025 23:25:18 +0100 Subject: [PATCH] first commit --- README.md | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 0 2 files changed, 160 insertions(+) create mode 100644 makefile diff --git a/README.md b/README.md index e69de29..71d078a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,160 @@ +# 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`. + +--- + +## 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 + diff --git a/makefile b/makefile new file mode 100644 index 0000000..e69de29