Programmation Java Swing/Créer une image

Une application peut avoir besoin de créer une image, soit pour réutiliser cette image et l'afficher plusieurs fois en évitant de tout redessiner à nouveau, soit pour créer un fichier externe utilisable dans une autre application.
La création d'une image peut se faire aussi simplement que le dessin d'un composant, en utilisant un contexte graphique.
Créer une image.
La classe codice_1 permet de créer une nouvelle image.
Le type d'image et sa taille en pixels doit être spécifié au constructeur.
Exemple :
// Image 200x100 pixels
// Couleurs RVB sur 8 bits regroupés en pixels de type entier (int) :
BufferedImage b_image = new BufferedImage(200,100, BufferedImage.TYPE_INT_RGB);
Dessiner le contenu.
Le contenu est ensuite dessiné en obtenant un contexte graphique, comme celui utilisé pour dessiner un composant :
Graphics2D g = b_image.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,200,100);
g.setColor(Color.BLUE);
g.drawRect(100,50,50,25);
g.dispose(); // Libérer le contexte après utilisation
Comme le contexte graphique est de la même classe que celui utilisé pour le dessin d'un composant, les mêmes méthodes s'appliquent, donc notamment la méthode codice_2 pour améliorer la qualité de l'image.
Enregistrer l'image.
Enregistrer l'image se fait en utilisant la classe codice_3, en appelant la méthode statique codice_4 et en lui passant l'image, le nom du format d'image, et le chemin du fichier (de type codice_5):
ImageIO.write(b_image, "png", new File("D:\Temp\image.png"));
Capture d'écran.
La classe codice_6 permet d'automatiser certaines actions de l'utilisateur (déplacer le curseur de souris, générer des touches, ...) et de réaliser des captures d'écrans.
Son but principal est de pouvoir tester des applications automatiquement.
La classe possède deux constructeurs :
Ensuite, il suffit d'appeler la méthode createScreenCapture(Rectangle bounds) pour créer une image de capture de la zone spécifiée de l'écran.
L'image retournée est de type codice_1.
Le code suivant réalise une capture de l'écran principal :
Robot robot = new Robot();
MediaTracker mt = new MediaTracker(this); // Argument de type Component, 
// this ok si le code est dans une classe de type composant ou fenêtre.
// Dimension(width, height) --> Rectangle(0, 0, width, height)
Rectangle tout_l_ecran = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage image_capture = robot.createScreenCapture(tout_l_ecran);
mt.addImage(image_capture, 0); // Ajouter l'image à attendre
mt.waitForAll(); // Attendre que l'image soit prête
La capture est réalisée de manière asynchrone, ce qui explique l'utilisation de la classe codice_8 dans l'exemple précédent pour attendre que l'image soit prête à être utilisée.

Photographie/Fabricants/Optique et Précision de Levallois/Focaflex