JavaFX - Hình ảnh
Bạn có thể tải và sửa đổi hình ảnh bằng cách sử dụng các lớp do JavaFX cung cấp trong gói javafx.scene.image. JavaFX hỗ trợ các định dạng hình ảnh nhưBmp, Gif, Jpeg, Png.
Chương này hướng dẫn bạn cách tải hình ảnh vào JavaFX, cách chiếu hình ảnh trong nhiều chế độ xem và cách thay đổi pixel của hình ảnh.
Đang tải hình ảnh
Bạn có thể tải một hình ảnh trong JavaFX bằng cách khởi tạo lớp có tên Image của gói javafx.scene.image.
Đối với hàm tạo của lớp, bạn phải chuyển một trong hai thông số sau:
An InputStream đối tượng của hình ảnh được tải hoặc,
Một biến chuỗi giữ URL cho hình ảnh.
//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));
Sau khi tải hình ảnh, bạn có thể đặt chế độ xem cho hình ảnh bằng cách khởi tạo ImageView và chuyển hình ảnh tới phương thức khởi tạo của nó như sau:
ImageView imageView = new ImageView(image);
Thí dụ
Sau đây là một ví dụ minh họa cách tải một hình ảnh trong JavaFX và thiết lập chế độ xem.
Lưu mã này trong một tệp có tên 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);
}
}
Biên dịch và thực thi tệp java đã lưu từ dấu nhắc lệnh bằng các lệnh sau.
Javac ImageExample.java
java ImageExample
Khi thực thi, chương trình trên tạo một cửa sổ JavaFX như sau:
Nhiều chế độ xem của một hình ảnh
Bạn cũng có thể đặt nhiều chế độ xem cho một hình ảnh trong cùng một cảnh. Chương trình sau đây là một ví dụ minh họa cách đặt các dạng xem khác nhau cho một hình ảnh trong một cảnh trong JavaFX.
Lưu mã này trong một tệp có tên 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);
}
}
Biên dịch và thực thi tệp java đã lưu từ dấu nhắc lệnh bằng các lệnh sau.
Javac MultipleViews.java
java MultipleViews
Khi thực thi, chương trình trên tạo một cửa sổ JavaFX như sau:
Viết điểm ảnh
JavaFX cung cấp các lớp có tên PixelReader và PixelWritercác lớp để đọc và ghi pixel của một hình ảnh. CácWritableImage lớp được sử dụng để tạo một hình ảnh có thể ghi.
Sau đây là một ví dụ minh họa cách đọc và ghi pixel của một hình ảnh. Ở đây, chúng ta đang đọc giá trị màu của hình ảnh và làm cho nó tối hơn.
Lưu mã này trong một tệp có tên 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);
}
}
Biên dịch và thực thi tệp java đã lưu từ dấu nhắc lệnh bằng các lệnh sau.
Javac WritingPixelsExample.java
java WritingPixelsExample
Khi thực thi, chương trình trên tạo một cửa sổ JavaFX như sau: