JavaFX - Images
Vous pouvez charger et modifier des images à l'aide des classes fournies par JavaFX dans le package javafx.scene.image. JavaFX prend en charge les formats d'image tels queBmp, Gif, Jpeg, Png.
Ce chapitre vous apprend à charger des images dans JavaFX, à projeter une image dans plusieurs vues et à modifier les pixels d'une image.
Chargement d'une image
Vous pouvez charger une image dans JavaFX en instanciant la classe nommée Image du forfait javafx.scene.image.
Au constructeur de la classe, vous devez passer l'un des éléments suivants -
Un InputStream objet de l'image à charger ou,
Une variable de chaîne contenant l'URL de l'image.
//Passing FileInputStream object as a parameter
FileInputStream inputstream = new FileInputStream("C:\\images\\image.jpg");
Image image = new Image(inputstream);
//Loading image from URL
//Image image = new Image(new FileInputStream("url for the image));
Après avoir chargé l'image, vous pouvez définir la vue de l'image en instanciant le ImageView class et en passant l'image à son constructeur comme suit -
ImageView imageView = new ImageView(image);
Exemple
Voici un exemple qui montre comment charger une image dans JavaFX et définir la vue.
Enregistrez ce code dans un fichier avec le nom ImageExample.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class ImageExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("path of the image"));
//Setting the image view
ImageView imageView = new ImageView(image);
//Setting the position of the image
imageView.setX(50);
imageView.setY(25);
//setting the fit height and width of the image view
imageView.setFitHeight(455);
imageView.setFitWidth(500);
//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Loading an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.
Javac ImageExample.java
java ImageExample
Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX comme suit -
Vues multiples d'une image
Vous pouvez également définir plusieurs vues pour une image dans la même scène. Le programme suivant est un exemple qui montre comment définir différentes vues pour une image dans une scène dans JavaFX.
Enregistrez ce code dans un fichier avec le nom MultipleViews.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class MultipleViews extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("file path"));
//Setting the image view 1
ImageView imageView1 = new ImageView(image);
//Setting the position of the image
imageView1.setX(50);
imageView1.setY(25);
//setting the fit height and width of the image view
imageView1.setFitHeight(300);
imageView1.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView1.setPreserveRatio(true);
//Setting the image view 2
ImageView imageView2 = new ImageView(image);
//Setting the position of the image
imageView2.setX(350);
imageView2.setY(25);
//setting the fit height and width of the image view
imageView2.setFitHeight(150);
imageView2.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView2.setPreserveRatio(true);
//Setting the image view 3
ImageView imageView3 = new ImageView(image);
//Setting the position of the image
imageView3.setX(350);
imageView3.setY(200);
//setting the fit height and width of the image view
imageView3.setFitHeight(100);
imageView3.setFitWidth(100);
//Setting the preserve ratio of the image view
imageView3.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView1, imageView2, imageView3);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting title to the Stage
stage.setTitle("Multiple views of an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.
Javac MultipleViews.java
java MultipleViews
Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX comme suit -
Écriture de pixels
JavaFX fournit des classes nommées PixelReader et PixelWriterclasses pour lire et écrire les pixels d'une image. leWritableImage class est utilisé pour créer une image inscriptible.
Voici un exemple qui montre comment lire et écrire des pixels d'une image. Ici, nous lisons la valeur de couleur d'une image et la rendons plus sombre.
Enregistrez ce code dans un fichier avec le nom WritingPixelsExample.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class WritingPixelsExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("C:\\images\\logo.jpg"));
int width = (int)image.getWidth();
int height = (int)image.getHeight();
//Creating a writable image
WritableImage wImage = new WritableImage(width, height);
//Reading color from the loaded image
PixelReader pixelReader = image.getPixelReader();
//getting the pixel writer
PixelWriter writer = wImage.getPixelWriter();
//Reading the color of the image
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
//Retrieving the color of the pixel of the loaded image
Color color = pixelReader.getColor(x, y);
//Setting the color to the writable image
writer.setColor(x, y, color.darker());
}
}
//Setting the view for the writable image
ImageView imageView = new ImageView(wImage);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Writing pixels ");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.
Javac WritingPixelsExample.java
java WritingPixelsExample
Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX comme suit -