120 lines
3.1 KiB
Markdown
120 lines
3.1 KiB
Markdown
# 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
|
||
|