Ce projet est l'occasion de travailler sur la représentation et la manipulation d'images. Ces images seront constituées de pixels caractérisés par une couleur représentant un niveau de gris.
Ce TP porte sur la représentation et la manipulation d’images en niveaux de gris. Les images sont constituées de pixels dont la couleur est caractérisée par un niveau de gris, représenté par un nombre entre 0 (noir) et 1 (blanc).
## Membre du projet
L’objectif est d’implémenter plusieurs classes Java permettant de manipuler ces images, d’appliquer des transformations simples, et de comprendre la gestion des couleurs en niveaux de gris.
- NOM, prénom
---
## Organisation du TP
Le TP est divisé en plusieurs parties correspondant à des tâches à réaliser :
### 1. Représentation des couleurs en niveaux de gris
- Compléter la classe `ByteGrayColor` qui implémente l’interface `GrayColor`.
- Implémenter les méthodes pour obtenir la luminosité, la couleur, et la comparaison entre couleurs.
- Ajouter des constantes pour les couleurs noir et blanc.
### 2. Représentation des images en niveaux de gris
- Compléter la classe `MatrixGrayImage` qui implémente l’interface `GrayImage`.
- Gérer la matrice de pixels, initialiser une image blanche.
### 3. Transformations d’images
Implémenter plusieurs transformations en créant des classes qui implémentent l’interface `Transform` :
-**Invert** : inversion des niveaux de gris.
-**DecreaseGrayLevels** : diminution du nombre de niveaux de gris.
-**Outline** : extraction des contours avec un seuil donné.
-**Pixelate** : pixelisation de l’image avec une taille de carré donnée.
-**CompositeTransform** : composition de plusieurs transformations successives.
### 4. Tâches supplémentaires (optionnelles)
- Création d’une transformation miroir (verticale, horizontale, ou les deux).
- Gestion d’images en couleurs au format PPM.
- Ajout d’un menu dans l’application pour contrôler les transformations et la gestion des fichiers.
---
## Installation et exécution
1.**Forker** le projet GitLab fourni (lien dans le sujet).
2. Cloner votre fork localement.
3. Importer le projet en tant que projet Gradle dans votre IDE (ex : IntelliJ IDEA, Eclipse).
4. Compiler le projet.
5. Exécuter l’application via la classe `Display` :
- L’image sera chargée, transformée selon la transformation appliquée dans la méthode `initialize`, puis affichée.
6. Faire régulièrement des commits pour suivre votre progression.
---
## Conseils
- Suivez les consignes de chaque tâche dans le PDF du TP.
- Supprimez les commentaires TODO une fois les méthodes complétées.
- Testez régulièrement vos classes et transformations.
- Utilisez `Math.floor` pour la quantification des niveaux de gris.
- Respectez la gestion des coordonnées `(x, y)` avec `(0,0)` en haut à gauche.
---
## Résultats attendus
Pour chaque transformation, vous devriez obtenir un affichage correspondant aux exemples fournis dans le sujet :
- Image inversée pour `Invert`.
- Image avec un nombre réduit de niveaux de gris pour `DecreaseGrayLevels`.
- Contours extraits pour `Outline`.
- Image pixelisée pour `Pixelate`.
- Image transformée par la composition des trois transformations dans `CompositeTransform`.
---
## Structure du projet
-`GrayColor` (interface)
-`ByteGrayColor` (classe)
-`GrayImage` (interface)
-`MatrixGrayImage` (classe)
-`Transform` (interface)
- Transformations :
-`Invert`
-`DecreaseGrayLevels`
-`Outline`
-`Pixelate`
-`CompositeTransform`
-`Display` (classe principale pour lancer l’application)