Outils de modifications d'images
Objectifs
Il s'agit de mettre en place une application permettant d'effectuer certaines modifications (recadrage, passage en niveaux de gris, rotation) sur une image. L'application finale sera aussi proche que possible des représentations données ci-dessous.
Programmation
Etape 1 : Une fenêtre, une image et des composants
Vous écrirez une classe JFrameOutilsImage correspondant à l'image ci-dessous. Cette classe comporte :
- une zone d'affichage des images (Utilisez la classe JPanelTailleImage de l'un des TDs précédents)
- trois labels et quatre zones de texte
- deux barres de réglage des valeurs de Largeur et de Hauteur (composants JSlider)
- six bouttons
Exemple de fenêtre au moment du lancement
|
Vous veillerez aux actions suivantes :
- le déplacement de chaque curseur entraîne la mise à jour du champs texte associé et vice-versa (un changement de valeur dans la zone de texte entraîne un déplacement du curseur)
- un click sur "Enregistrer ..." entraînera l'affichage d'une fenêtre de choix de fichier et l'enregistrement de l'image redimensionnée (utilisez ImageIO.write(...))
- Un click sur "Remise à zéro" recharge l'image de départ et les valeurs de départ pour le recadrage
- Un click sur "Annuler" ferme la fenêtre
Etape 2 : Ecrire des méthodes de modification des images
Vous écrirez une classe ImageOutils comportant au minimum les méthodes suivantes :
- Rotate : prend une BufferedImage et retourne une BufferedImage après rotation de 90 degrès dans le sens des aiguilles d'une montre
- GrayScale : prend une BufferedImage et retourne une BufferedImage après transformation de la couleur de chaque pixel de l'image en un niveau de gris. On utilisera pour cela la formule du NTSC qui veut que si le pixel de départ à la couleur r pour le rouge, g pour le vert et b pour le bleu alors le pixel en niveau de gris aura la valeur : 0.294*r + 0.582*g + 0.124*b
- Crop : prend une BufferedImage et retourne une BufferedImage après recadrage de l'image selon une zone donnée par les coordonnées du coin supérieur gauche de la fenêtre de recadrage et les valeurs de dimension selon les axes Ox et Oy
- Image2BufferedImage : prend une Image et retourne une BufferedImage
Etape 3 : Intégrer les actions de modification des images à votre JFrameOutilsImage
Exemple de passage en niveaux de gris
|
Exemple des trois outils en même temps
|
Etape 4 : Consolider votre recadrage et le rendre plus convivial
On peut ajouter les points suivants pour le recadrage :
- vérifier que la zone définie par le coin supérieur gauche et la dimension de recadrage est cohérente avec la taille de l'image elle-même ==> mettre en rouge la ou les valeurs posant problème
- tracer en sur-impression sur l'image la zone de recadrage définie : une modification du coin de recadrage (avec appui sur "Enter" dans la zone de texte ou de la taille de recadrage (modification avec appui sur "Enter" ou glissement des SlideBar) déclanche le tracé du rectangle défini en rouge
- tracer à la souris un rectangle de récadrage sur l'image : pour ce faire écrire une nouvelle classe
- utiliser le rectangle tracé à la souris comme paramètre de recadrage