JavaFX - Bilder
Sie können Bilder mit den von JavaFX im Paket bereitgestellten Klassen laden und ändern javafx.scene.image. JavaFX unterstützt die Bildformate wieBmp, Gif, Jpeg, Png.
In diesem Kapitel erfahren Sie, wie Sie Bilder in JavaFX laden, ein Bild in mehreren Ansichten projizieren und die Pixel eines Bildes ändern.
Laden eines Bildes
Sie können ein Bild in JavaFX laden, indem Sie die benannte Klasse instanziieren Image des Pakets javafx.scene.image.
An den Konstruktor der Klasse müssen Sie eine der folgenden Optionen übergeben:
Ein InputStream Objekt des zu ladenden Bildes oder,
Eine Zeichenfolgenvariable, die die URL für das Bild enthält.
//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));
Nach dem Laden des Bildes können Sie die Ansicht für das Bild festlegen, indem Sie das instanziieren ImageView Klasse und Übergabe des Bildes an seinen Konstruktor wie folgt -
ImageView imageView = new ImageView(image);
Beispiel
Das folgende Beispiel zeigt, wie Sie ein Bild in JavaFX laden und die Ansicht festlegen.
Speichern Sie diesen Code in einer Datei mit dem Namen 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);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac ImageExample.java
java ImageExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Mehrere Ansichten eines Bildes
Sie können auch mehrere Ansichten für ein Bild in derselben Szene festlegen. Das folgende Programm zeigt anhand eines Beispiels, wie Sie verschiedene Ansichten für ein Bild in einer Szene in JavaFX festlegen.
Speichern Sie diesen Code in einer Datei mit dem Namen 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);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac MultipleViews.java
java MultipleViews
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Pixel schreiben
JavaFX bietet benannte Klassen PixelReader und PixelWriterKlassen zum Lesen und Schreiben von Pixeln eines Bildes. DasWritableImage Klasse wird verwendet, um ein beschreibbares Bild zu erstellen.
Das folgende Beispiel zeigt, wie Pixel eines Bildes gelesen und geschrieben werden. Hier lesen wir den Farbwert eines Bildes und machen es dunkler.
Speichern Sie diesen Code in einer Datei mit dem Namen 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);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac WritingPixelsExample.java
java WritingPixelsExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt: