MISE A JOUR

This commit is contained in:
2026-01-11 14:45:24 +01:00
parent b269b4ce82
commit 06efaa8857
+119 -174
View File
@@ -1,174 +1,119 @@
# Projet : Primitive Image Format (PIF) # Projet : Primitive Image Format (PIF)
## Description générale ## Description générale
Ce projet consiste à implémenter un nouveau format dimage compressé sans perte, appelé **PIF (Primitive Image Format)**, inspiré du format JFIF. Ce projet consiste à implémenter un nouveau format dimage 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. 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 : Deux programmes Java doivent être développés :
1. **Visualisateur PIF** 1. **Visualisateur PIF**
Programme capable douvrir un fichier `.pif` et dafficher limage dans une interface graphique. Programme capable douvrir un fichier `.pif` et dafficher limage dans une interface graphique.
2. **Convertisseur vers PIF** 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`. 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. Ce travail doit être réalisé en binôme ou trinôme.
--- ---
## Deadline ## Deadline
**Date limite de rendu : dimanche 11 janvier 2025 à 23h59.** **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
## Fonctionnalités attendues
### 1. Visualisateur `.pif`
### 1. Visualisateur `.pif`
- Lecture du fichier `.pif` via argument de ligne de commande ou `JFileChooser`.
- Lecture du fichier `.pif` via argument de ligne de commande ou `JFileChooser`. - Décodage :
- Décodage : - de len-tête (largeur, hauteur),
- de len-tête (largeur, hauteur), - des trois tables canoniques (R, G, B),
- des trois tables canoniques (R, G, B), - des données binaires des pixels.
- des données binaires des pixels. - Affichage graphique sous Swing :
- Affichage graphique sous Swing : - fenêtre redimensionnable,
- fenêtre redimensionnable, - image centrée si petite,
- image centrée si petite, - image déplaçable à la souris si trop grande.
- image déplaçable à la souris si trop grande.
---
---
### 2. Convertisseur vers format `.pif`
### 2. Convertisseur vers format `.pif`
- Chargement d'une image via `ImageIO.read()`.
- Chargement d'une image via `ImageIO.read()`. - Extraction :
- Extraction : - des tables de fréquences,
- des tables de fréquences, - des codes Huffman initiaux,
- des codes Huffman initiaux, - des codes canoniques triés.
- des codes canoniques triés. - Affichage des tables pour inspection.
- Affichage des tables pour inspection. - Génération du fichier `.pif` :
- Génération du fichier `.pif` : - en-tête,
- en-tête, - tables canoniques compactes,
- tables canoniques compactes, - données binaires des pixels encodés.
- données binaires des pixels encodés. - Le deuxième argument de ligne de commande peut définir le nom du fichier `.pif`.
- Le deuxième argument de ligne de commande peut définir le nom du fichier `.pif`.
---
---
## Structure du format PIF
## Structure du format PIF
Un fichier `.pif` contient trois sections :
Un fichier `.pif` contient trois sections :
1. **En-tête (4 octets)**
1. **En-tête (4 octets)** - largeur (2 octets)
- largeur (2 octets) - hauteur (2 octets)
- hauteur (2 octets)
2. **Tables canoniques (768 octets)**
2. **Tables canoniques (768 octets)** Trois tables successives de 256 octets : rouge, vert, bleu.
Trois tables successives de 256 octets : rouge, vert, bleu. Chaque octet indique la longueur du code canonique dune valeur entre 0 et 255.
Chaque octet indique la longueur du code canonique dune valeur entre 0 et 255.
3. **Section pixels (à partir du 773e octet)**
3. **Section pixels (à partir du 773e octet)** Les trois composantes (R, G, B) sont encodées via leurs codes canoniques respectifs.
Les trois composantes (R, G, B) sont encodées via leurs codes canoniques respectifs. Les bits sont packés de manière contiguë.
Les bits sont packés de manière contiguë.
--- ## Rapport à produire
## Processus de compression Un rapport PDF doit contenir :
### 1. Création des tables de fréquences - noms des membres du groupe,
- introduction résumant le sujet,
Pour R, G et B : compter combien de fois chaque valeur apparaît dans limage. - description des fonctionnalités du programme,
- captures d’écran,
### 2. Construction des codes Huffman - diagrammes UML simplifiés,
- explication du compresseur (Huffman, canoniques, structure du fichier),
- Un arbre est construit par composante. - explication du décompresseur,
- Les valeurs les plus fréquentes reçoivent les codes les plus courts. - conclusion personnelle de chaque membre.
- Les codes initiaux peuvent varier en longueur.
Le rapport ne doit pas contenir de code source.
### 3. Génération des codes canoniques
---
- Tri des valeurs par longueur de code puis par valeur.
- Premier code : rempli de zéros. ## Compilation et exécution
- Les suivants sont obtenus par incrément binaire.
- Permet une reconstruction simple côté visualisateur. ### Visualisateur
java -jar pif-viewer.jar chemin/image.pif
---
## Architecture logicielle ### Convertisseur
java -jar pif-converter.jar image.png sortie.pif
Le projet doit inclure :
- un package Java unique, Si aucun argument nest fourni, un `JFileChooser` est ouvert.
- toutes les classes nécessaires au traitement :
- gestion du fichier PIF, ---
- lecture/écriture binaire,
- génération des fréquences,
- Huffman, - Les commits, leur fréquence et la collaboration seront pris en compte dans la note.
- codes canoniques,
- interface graphique, ---
- programme principal du visualisateur,
- programme principal du convertisseur. ## Auteurs
- un `Makefile` générant deux exécutables `.jar`.
- Algassimou Pellel DIALLO
--- - Ayoub ANHDIRE
- Youness BOULALAME
## Classes Java
## Enseignant
Les classes Java utilisées dans le projet : - Luc HERNANDEZ
- [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 nest 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