MISE A JOUR
This commit is contained in:
@@ -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 d’image compressé sans perte, appelé **PIF (Primitive Image Format)**, inspiré du format JFIF.
|
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.
|
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 d’ouvrir un fichier `.pif` et d’afficher l’image dans une interface graphique.
|
Programme capable d’ouvrir un fichier `.pif` et d’afficher l’image 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 l’en-tête (largeur, hauteur),
|
||||||
- de l’en-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 d’une valeur entre 0 et 255.
|
||||||
Chaque octet indique la longueur du code canonique d’une 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 l’image.
|
- 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 n’est 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 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
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user