dev #4

Merged
Algassimou Pellel DIALLO merged 3 commits from dev into main 2025-12-13 21:49:28 +01:00
6 changed files with 1335 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
plantuml.png
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

File diff suppressed because it is too large Load Diff
+198
View File
@@ -0,0 +1,198 @@
# Sprint Planning Projet PIF
## Légende
AD → Algassimou
AA → Ayoub
YB → Youness
🟥 TODO = À faire
🟨 DOING = En cours
🟩 DONE = Terminé
# ---------------------------------------
# SPRINT 1 (1320 décembre 2025)
# ---------------------------------------
Objectif : Mise en place des fondations techniques
(image, binaire, Huffman, canoniques)
| US | Assigné | Statut | | Description |
|----------|---------|--------|-----|-------------|
| US-D1 | AD | TODO | 🟥 | Implémenter BitInputStream (lecture bit par bit) |
| US-D2 | AD | TODO | 🟥 | Implémenter BitOutputStream (écriture bit par bit) |
| US-D3 | AD | TODO | 🟥 | Générer les tables de fréquences RGB |
| US-D4 | AD | TODO | 🟥 | Construire larbre Huffman |
| US-D5 | AA | TODO | 🟥 | Générer les codes Huffman |
| US-D6 | AA | TODO | 🟥 | Générer les codes canoniques |
| US-U5 | YB | TODO | 🟥 | Chargement dimage via ImageIO |
| US-D8 | YB | TODO | 🟥 | Structure RGBImage + Pixel |
| US-P1 | AA | TODO | 🟥 | Interface simple daffichage des fréquences |
| US-P2 | AD | TODO | 🟥 | Interface simple daffichage Huffman |
| US-P3 | AA | TODO | 🟥 | Interface simple daffichage canoniques |
## Fichiers à créer Sprint 1
### `src/mimage/`
| Nom du fichier | Rôle |
|----------------|-------|
| `Pixel.java` | Représente un pixel (r, g, b) |
| `RGBImage.java` | Matrice de pixels + utilitaires |
### `src/mhuffman/`
| Nom du fichier | Rôle |
|----------------|-------|
| `FrequencyTable.java` | Stocke les fréquences R/G/B |
| `HuffmanNode.java` | Nœud darbre Huffman |
| `HuffmanTree.java` | Construction de larbre + génération des codes |
| `CanonicalCode.java` | Génération des codes canoniques |
### `src/util/`
| Nom du fichier | Rôle |
|----------------|-------|
| `BitInputStream.java` | Lecture bit par bit |
| `BitOutputStream.java` | Écriture bit par bit |
| `ByteUtils.java` | Conversions entiers ↔ octets |
| `FileUtils.java` | Méthodes utilitaires fichiers |
### `src/vconverter/`
| Nom du fichier | Rôle |
|----------------|-------|
| `ConverterWindow.java` | Fenêtre du convertisseur |
| `PreviewPanel.java` | Aperçu de limage chargée |
| `FrequencyTablePanel.java` | Affichage fréquences RGB |
| `CodeTablePanel.java` | Affichage Huffman + canoniques |
### `src/` (racine)
| Nom du fichier | Rôle |
|----------------|-------|
| `ConverterController.java` | Contrôleur du convertisseur |
| `Main.java` | Lancement du convertisseur (Sprint 1) |
---
### Résultat attendu Sprint 1
- Compression entièrement fonctionnelle
- Import dimage opérationnel
- GUI minimaliste affichant fréquences / Huffman / canoniques
- Aucun fichier `.pif` encore écrit
# ---------------------------------------
# SPRINT 2 (2027 décembre 2025)
# ---------------------------------------
Objectif : Écriture du format `.pif` + finalisation convertisseur
| US | Assigné | Statut | | Description |
|------------|---------|--------|-----|-------------|
| US-D2 | AD | TODO | 🟥 | Vérifier BitOutputStream avec flux réel |
| US-C5 | AD | TODO | 🟥 | Implémenter PIFWriter (header + tables + pixels compressés) |
| US-U6 | AD | TODO | 🟥 | Exporter une image en `.pif` |
| US-P1 | AA | TODO | 🟥 | Finaliser affichage des fréquences |
| US-P2 | YB | TODO | 🟥 | Finaliser affichage codes Huffman |
| US-P3 | AA | TODO | 🟥 | Finaliser affichage codes canoniques |
| US-U7 | YB | TODO | 🟥 | Implémenter laperçu (PreviewPanel) |
| US-D3..D6 | YB | TODO | 🟥 | Lier interface convertisseur ↔ compression |
## Fichiers à créer Sprint 2
### `src/mpif/`
| Nom du fichier | Rôle |
|----------------|-------|
| `PIFWriter.java` | Écriture du fichier `.pif` |
### `src/vconverter/` (complément)
| Nom du fichier | Rôle |
|----------------|-------|
| `SavePanel.java` (optionnel) | UI pour sauvegarde `.pif` |
### `src/`
| Nom du fichier | Rôle |
|----------------|-------|
| *(aucun nouveau fichier obligatoire)* | Le reste se fait dans les fichiers existants |
---
### Résultat attendu Sprint 2
- `.pif` généré correctement
- Convertisseur fonctionnel à 80 %
- UI complète pour la consultation des tables
- Aperçu image fonctionnel
# ---------------------------------------
# SPRINT 3 (27 décembre 2025 3 janvier 2026)
# ---------------------------------------
Objectif : Lecture du fichier `.pif` + visualisateur opérationnel
| US | Assigné | Statut | | Description |
|----------|---------|--------|-----|-------------|
| US-D7 | AD | TODO | 🟥 | Reconstruire les codes canoniques depuis fichier |
| US-D8 | AD | TODO | 🟥 | Décoder pixels (implémenter PIFReader) |
| US-U1 | YB | TODO | 🟥 | Ouvrir `.pif` via argument ou JFileChooser |
| US-U2 | AA | TODO | 🟥 | Afficher limage dans une fenêtre |
| US-U3 | AA | TODO | 🟥 | Centrer limage si elle est petite |
| US-U4 | AD | TODO | 🟥 | Déplacement de limage à la souris |
| US-P6 | AA | TODO | 🟥 | Préparer diagrammes UML |
## Fichiers à créer Sprint 3
### `src/mpif/`
| Nom du fichier | Rôle |
|----------------|-------|
| `PIFReader.java` | Lecture et décodage du `.pif` |
### `src/vviewer/`
| Nom du fichier | Rôle |
|----------------|-------|
| `ViewerWindow.java` | Fenêtre principale |
| `ImagePanel.java` | Affichage + déplacement de limage |
### `src/`
| Nom du fichier | Rôle |
|----------------|-------|
| `ViewerController.java` | Contrôleur du visualisateur |
| `MainViewer.java` | Programme principal visualisateur |
---
### Résultat attendu Sprint 3
- Visualisateur 100 % fonctionnel
- Lecture complète du format `.pif`
- Image affichée, centrée, déplaçable
- UML structurel prêt pour rapport
# ---------------------------------------
# SPRINT 4 (310 janvier 2026)
# ---------------------------------------
Objectif : Finalisation complète + livrable final
| US | Assigné | Statut | | Description |
|------------|---------|--------|-----|-------------|
| US-P5 | AD | TODO | 🟥 | Javadoc complète |
| US-P7 | AD | TODO | 🟥 | Makefile (compilation + jar + exécution) |
| US-P6 | AA | TODO | 🟥 | Finalisation des diagrammes UML |
| Tests | YB | TODO | 🟥 | Tests convertisseur + visualisateur |
| Rapport | AD/AA/YB| TODO | 🟥 | Rédaction rapport complet |
| Livraison | AD/AA/YB| TODO | 🟥 | Vérification dépôt Gitea + JAR exécutables |
## Fichiers à créer Sprint 4
### Racine creee tout au long
| Nom du fichier | Rôle |
|----------------|-------|
| `Makefile` | Compilation + génération `.jar` |
### `/doc` (optionnel)
| Nom du fichier | Rôle |
|----------------|-------|
| `rapport.pdf` | Livrable final |
| `uml.puml` | Sources de diagrammes |
---
### Résultat attendu Sprint 4
- Rapport PDF validé
- Diagrammes UML terminés
- Makefile opérationnel
- Projet soumis proprement sur Gitea
+90
View File
@@ -0,0 +1,90 @@
# PRODUCT BACKLOG — Projet PIF
# 1. US UTILISATEUR
Ce sont les besoins réels dun utilisateur final qui voudrait simplement visualiser ou convertir une image.
---
### **US-U1 — Ouvrir un fichier PIF**
En tant quutilisateur, je veux pouvoir ouvrir un fichier `.pif` via un argument ou un sélecteur de fichiers, afin dafficher limage.
### **US-U2 — Afficher limage dans une fenêtre**
En tant quutilisateur, je veux voir limage affichée dans une fenêtre redimensionnable.
### **US-U3 — Centrage automatique**
En tant quutilisateur, je veux que limage soit centrée si elle est plus petite que la fenêtre, pour une meilleure visibilité.
### **US-U4 — Déplacement de limage**
En tant quutilisateur, je veux pouvoir déplacer limage à la souris si elle dépasse la taille de la fenêtre.
### **US-U5 — Charger une image RGB (PNG/JPEG)**
En tant quutilisateur, je veux charger une image standard afin de la convertir en `.pif`.
### **US-U6 — Exporter une image au format PIF**
En tant quutilisateur, je veux enregistrer limage sous format `.pif`.
### **US-U7 — Aperçu de limage avant conversion**
En tant quutilisateur, je veux voir une miniature de limage chargée.
---
# 2. US DÉVELOPPEUR
Ce sont les besoins techniques indispensables au fonctionnement interne du format PIF.
---
### **US-D1 — Lire des bits depuis un flux**
Le système doit permettre la lecture bit par bit depuis un fichier PIF.
### **US-D2 — Écrire des bits dans un fichier**
Le système doit permettre l’écriture de bits pour générer un fichier PIF.
### **US-D3 — Construire les tables de fréquences RGB**
Le système doit analyser limage pour obtenir les fréquences des valeurs R, G, B.
### **US-D4 — Construire un arbre de Huffman**
Le système doit créer un arbre à partir des fréquences dune composante.
### **US-D5 — Générer les codes Huffman**
Le système doit produire les codes initiaux à partir de larbre.
### **US-D6 — Générer les codes canoniques**
Le système doit transformer les codes Huffman en codes canoniques.
### **US-D7 — Reconstruire les codes canoniques en lecture**
Le système doit pouvoir reconstruire les codes à partir des longueurs contenues dans le fichier .pif.
### **US-D8 — Décoder un fichier PIF**
Le système doit pouvoir reconstituer limage RGB à partir des données compressées.
---
# 3. US PROFESSEUR (PEDAGOGIQUE)
Ces fonctionnalités nont **aucune utilité pour un utilisateur réel**, mais sont demandées par le professeur pour vérifier le bon fonctionnement de notre projet.
---
### **US-P1 — Affichage des tables de fréquences**
En tant que professeur, je veux consulter la table de fréquences R, G et B pour vérifier que le calcul est correct.
### **US-P2 — Affichage des codes Huffman**
En tant que professeur, je veux voir les codes Huffman générés afin de valider votre algorithme.
### **US-P3 — Affichage des codes canoniques**
En tant que professeur, je veux visualiser les codes canoniques afin d’évaluer votre compréhension de leur construction.
### **US-P4 — Affichage de larbre Huffman (optionnel)**
En tant que professeur, je veux pouvoir inspecter la structure de larbre pour vérifier votre implémentation.
### **US-P5 — Documentation Javadoc pour chaque classe**
En tant que professeur, je veux avoir une documentation claire auto-générable.
### **US-P6 — Diagrammes UML dans le rapport**
En tant que professeur, je veux retrouver un diagramme de classes et un diagramme dobjets dans le rapport.
### **US-P7 — Makefile complet**
En tant que professeur, je veux pouvoir compiler les deux programmes en .jar exécutables avec un Makefile clair.
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB