Merge branches 'dev' and 'dev' of https://grond.iut-fbleau.fr/dialloa/SAE32_2025 into dev
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
# Sprint Planning – Projet PIF
|
||||
|
||||
## Légende
|
||||
@@ -190,3 +191,197 @@ Objectif : Finalisation complète + livrable final
|
||||
- Diagrammes UML terminés
|
||||
- Makefile opérationnel
|
||||
- Projet soumis proprement sur Gitea
|
||||
=======
|
||||
# Sprint Planning – Projet PIF
|
||||
|
||||
## Légende
|
||||
AD → Algassimou
|
||||
AA → Ayoub
|
||||
YB → Youness
|
||||
|
||||
🟥 TODO = À faire
|
||||
🟨 DOING = En cours
|
||||
🟩 DONE = Terminé
|
||||
|
||||
|
||||
# ---------------------------------------
|
||||
# SPRINT 1 (13–20 décembre 2025)
|
||||
# ---------------------------------------
|
||||
Objectif : Mise en place des fondations techniques
|
||||
(image, binaire, Huffman, canoniques)
|
||||
|
||||
| US | Assigné | Statut | | Description |
|
||||
|-------|---------|--------|----|----------------------------------------------------|
|
||||
| US-D1 | AD | DONE | 🟩 | Implémenter BitInputStream (lecture bit par bit) |
|
||||
| US-D2 | AD | DONE | 🟩 | Implémenter BitOutputStream (écriture bit par bit) |
|
||||
| US-D3 | AD | DONE | 🟩 | Générer les tables de fréquences RGB |
|
||||
| US-D4 | AD | DONE | 🟩 | Construire l’arbre Huffman |
|
||||
| US-D5 | AA | DONE | 🟩 | Générer les codes Huffman |
|
||||
| US-D6 | AA | DONE | 🟩 | Générer les codes canoniques |
|
||||
| US-U5 | YB | DONE | 🟩 | Chargement d’image via ImageIO |
|
||||
| US-D8 | YB | DONE | 🟩 | Structure RGBImage + Pixel |
|
||||
| US-P1 | AA | DONE | 🟩 | Interface simple d’affichage des fréquences |
|
||||
| US-P2 | AD | DONE | 🟩 | Interface simple d’affichage codes Huffman |
|
||||
| US-P3 | AA | DONE | 🟩 | Interface simple d’affichage codes canoniques |
|
||||
|
||||
## Fichiers à créer – Sprint 1
|
||||
|
||||
### `src/mimage/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `Pixel.java` | Représente un pixel (r, g, b) | US-D8 |
|
||||
| `RGBImage.java` | Matrice de pixels + utilitaires | US-D8, US-U5 |
|
||||
|
||||
### `src/mhuffman/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `FrequencyTable.java` | Stocke les fréquences R/G/B | US-D3 |
|
||||
| `HuffmanNode.java` | Nœud d’arbre Huffman | US-D4 |
|
||||
| `HuffmanTree.java` | Construction arbre + génération des codes | US-D4, US-D5 |
|
||||
| `CanonicalCode.java` | Génération des codes canoniques | US-D6 |
|
||||
|
||||
### `src/util/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `BitInputStream.java` | Lecture bit par bit | US-D1 |
|
||||
| `BitOutputStream.java` | Écriture bit par bit | US-D2 |
|
||||
| `ByteUtils.java` | Conversion int octets | US-D3 et plus |
|
||||
| `FileUtils.java` | Méthodes utilitaires fichiers | US-U5 (indirect) |
|
||||
|
||||
### `src/vconverter/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `ConverterWindow.java` | Fenêtre du convertisseur | US-P1, US-P2, US-P3 |
|
||||
| `PreviewPanel.java` | Aperçu de l’image chargée | US-U5 |
|
||||
| `FrequencyTablePanel.java` | Affichage fréquences RGB | US-P1 |
|
||||
| `CodeTablePanel.java` | Affichage Huffman + canoniques | US-P2, US-P3 |
|
||||
|
||||
### `src/` (racine)
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `ConverterController.java` | Contrôleur du convertisseur | US-U5, US-D3..D6, US-P1..P3 |
|
||||
| `Convertisseur.java` | Lancement du convertisseur | — |
|
||||
---
|
||||
|
||||
### Résultat attendu Sprint 1
|
||||
- Compression entièrement fonctionnelle
|
||||
- Import d’image opérationnel
|
||||
- GUI minimaliste affichant fréquences / Huffman / canoniques
|
||||
- Aucun fichier `.pif` encore écrit
|
||||
|
||||
|
||||
# ---------------------------------------
|
||||
# SPRINT 2 (20–27 décembre 2025)
|
||||
# ---------------------------------------
|
||||
Objectif : Écriture du format `.pif` + finalisation convertisseur
|
||||
|
||||
| US | Assigné | Statut | | Description |
|
||||
|------------|---------|--------|-----|-------------|
|
||||
| US-D2 | AA | DONE | 🟩 | Vérifier BitOutputStream avec flux réel |
|
||||
| US-C5 | AD | DONE | 🟩 | Implémenter PIFWriter (header + tables + pixels compressés) |
|
||||
| US-U6 | AD | DONE | 🟩 | Exporter une image en `.pif` |
|
||||
| US-P1 | AA | DONE | 🟩 | Finaliser affichage des fréquences |
|
||||
| US-P2 | AA | DONE | 🟩 | Finaliser affichage codes Huffman |
|
||||
| US-P3 | AA | DONE | 🟩 | Finaliser affichage codes canoniques |
|
||||
| US-U7 | AD | DONE | 🟩 | Implémenter l’aperçu (PreviewPanel) |
|
||||
|
||||
## Fichiers à créer – Sprint 2
|
||||
|
||||
### `src/mpif/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `PIFWriter.java` | Écriture du fichier `.pif` | US-C5, US-U6 |
|
||||
|
||||
### `src/vconverter/` (complément)
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `SavePanel.java` en option a voir | Interface de sauvegarde `.pif` | US-U6 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 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 | DONE | 🟩 | Reconstruire les codes canoniques depuis fichier |
|
||||
| US-D8 | AD | DONE | 🟩 | Décoder pixels (implémenter PIFReader) |
|
||||
| US-U1 | YB | WP | 🟨 | Ouvrir `.pif` via argument ou JFileChooser |
|
||||
| US-U2 | AA | TODO | 🟥 | Afficher l’image dans une fenêtre |
|
||||
| US-U3 | AA | TODO | 🟥 | Centrer l’image si elle est petite |
|
||||
| US-U4 | AD | TODO | 🟥 | Déplacement de l’image à la souris |
|
||||
| US-P6 | AA | TODO | 🟥 | Préparer diagrammes UML |
|
||||
|
||||
## Fichiers à créer – Sprint 3
|
||||
|
||||
### `src/mpif/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `PIFReader.java` | Lecture et décodage du `.pif` | US-D7, US-D8 |
|
||||
|
||||
### `src/vviewer/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `ViewerWindow.java` | Fenêtre visualisation | US-U2 |
|
||||
| `ImagePanel.java` | Affichage + déplacement image | US-U2, US-U3, US-U4 |
|
||||
|
||||
### `src/`
|
||||
| Nom du fichier | Rôle | US |
|
||||
|----------------|-------|----|
|
||||
| `ViewerController.java` | Contrôle du visualisateur | US-U1..U4 |
|
||||
| `Viewer.java` | Programme principal du visualisateur | US-U1 |
|
||||
|
||||
---
|
||||
|
||||
### 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 (3–10 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`
|
||||
| Nom du fichier | Rôle |
|
||||
|----------------|-------|
|
||||
| `rapport.pdf` | Livrable final |
|
||||
| `UML/___.plantuml` | Sources de diagrammes |
|
||||
|
||||
---
|
||||
|
||||
### Résultat attendu Sprint 4
|
||||
- Rapport PDF validé
|
||||
- Diagrammes UML terminés
|
||||
- Makefile opérationnel
|
||||
- Projet soumis proprement sur Gitea
|
||||
>>>>>>> 40f71dddd52fc07edc1d47d48d56fd65a2a79fe3
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -64,8 +64,17 @@ $(BIN)/$(PKG_PATH)/util/BitOutputStream.class: $(BIN) \
|
||||
|
||||
|
||||
# Compilation des classes mhuffman
|
||||
|
||||
# Ajout de la classe ComparateurCanonique :
|
||||
$(BIN)/$(PKG_PATH)/mhuffman/ComparateurCanonique.class: $(BIN) \
|
||||
$(SRC)/$(PKG_PATH)/mhuffman/ComparateurCanonique.java
|
||||
$(JAVAC) -cp $(BIN) -d $(BIN) $(SRC)/$(PKG_PATH)/mhuffman/ComparateurCanonique.java
|
||||
#
|
||||
|
||||
|
||||
$(BIN)/$(PKG_PATH)/mhuffman/CanonicalCode.class: $(BIN) \
|
||||
$(SRC)/$(PKG_PATH)/mhuffman/CanonicalCode.java
|
||||
$(SRC)/$(PKG_PATH)/mhuffman/CanonicalCode.java \
|
||||
$(BIN)/$(PKG_PATH)/mhuffman/ComparateurCanonique.class
|
||||
$(JAVAC) -cp $(BIN) -d $(BIN) $(SRC)/$(PKG_PATH)/mhuffman/CanonicalCode.java
|
||||
|
||||
$(BIN)/$(PKG_PATH)/mhuffman/FrequencyTable.class: $(BIN) \
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
package fr.iutfbleau.sae;
|
||||
|
||||
public class Viewer {
|
||||
@@ -5,3 +6,31 @@ public class Viewer {
|
||||
System.out.println("dqkdjqkdjqkdjqkdjqkdj");
|
||||
}
|
||||
}
|
||||
=======
|
||||
package fr.iutfbleau.sae;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
//teste avec ia
|
||||
private void chargerFichier() {
|
||||
JTextArea zoneTexte = new JTextArea();
|
||||
zoneTexte.setEditable(false);
|
||||
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(fichierPif))) {
|
||||
String ligne;
|
||||
while ((ligne = br.readLine()) != null) {
|
||||
zoneTexte.append(ligne + "\n");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this,
|
||||
"Erreur lors de l'ouverture du fichier",
|
||||
"Erreur",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
add(new JScrollPane(zoneTexte), BorderLayout.CENTER);
|
||||
setVisible(true);
|
||||
}
|
||||
>>>>>>> 40f71dddd52fc07edc1d47d48d56fd65a2a79fe3
|
||||
|
||||
@@ -19,20 +19,9 @@ public class CanonicalCode{
|
||||
|
||||
|
||||
|
||||
// =============== ATTENTION CLASSE ANONYME !!!!!!! ================
|
||||
Collections.sort(liste, new Comparator<Map.Entry<Integer, String>>() {
|
||||
@Override
|
||||
public int compare(Map.Entry<Integer, String> arg1 ,Map.Entry<Integer, String> arg2) {
|
||||
Collections.sort(liste, new ComparateurCanonique());
|
||||
|
||||
int length1 = arg1.getValue().length();
|
||||
int length2 = arg2.getValue().length();
|
||||
|
||||
if (length1 != length2) {
|
||||
return length1 - length2;
|
||||
}
|
||||
return arg1.getKey() - arg2.getKey();
|
||||
}
|
||||
});
|
||||
|
||||
Map<Integer,String> canonicalCodes = new HashMap<>();
|
||||
int code = 0; // code canonique à attribuer
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package fr.iutfbleau.sae.mhuffman;
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
public class ComparateurCanonique implements Comparator<Map.Entry<Integer, String>> {
|
||||
|
||||
@Override
|
||||
public int compare(Map.Entry<Integer, String> entree1,Map.Entry<Integer, String> entree2) {
|
||||
|
||||
int longueur1 = entree1.getValue().length();
|
||||
int longueur2 = entree2.getValue().length();
|
||||
|
||||
if (longueur1 != longueur2) {
|
||||
return longueur1 - longueur2;
|
||||
}
|
||||
|
||||
return entree1.getKey() - entree2.getKey();
|
||||
}
|
||||
}
|
||||
@@ -44,10 +44,26 @@ public class PIFReader {
|
||||
|
||||
public void readHeader(BitInputStream in) {
|
||||
|
||||
// La largeur et l'hauteur de l'image occupe chaqun deux octets soit 16 bits :
|
||||
this.width = in.readBits(16);
|
||||
this.height = in.readBits(16);
|
||||
}
|
||||
|
||||
public void readCanonicalTables(BitInputStream in) {
|
||||
// TODO: Implement canonical table reading
|
||||
this.lenR = new int[256];
|
||||
this.lenG = new int[256];
|
||||
this.lenB = new int[256];
|
||||
|
||||
for (int i = 0; i < 256; i++){
|
||||
lenR[i] = in.readBits(8);
|
||||
}
|
||||
for (int j = 0; j < 256; j++){
|
||||
lenG[j] = in.readBits(8);
|
||||
}
|
||||
|
||||
for (int k = 0; k < 256; k++){
|
||||
lenB[k] = in.readBits(8);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String,Integer> rebuildCanonical(int[] lengths) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package fr.iutfbleau.sae.vviewer;
|
||||
|
||||
public class ImagePanel extends JPanel{
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package fr.iutfbleau.sae.vviewer;
|
||||
|
||||
public class ViewerWindow extends JFrame{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user