JavaFX - 图像
您可以使用 JavaFX 在包 javafx.scene.image 中提供的类来加载和修改图像。 JavaFX 支持 Bmp、Gif、Jpeg、Png 等图像格式。
本章将教您如何将图像加载到 JavaFX 中、如何在多个视图中投影图像以及如何更改图像的像素。
加载图像
您可以通过实例化 javafx.scene.image 包中名为 Image 的类来在 JavaFX 中加载图像。
对于该类的构造函数,您必须传递以下任一 −
要加载的图像的 InputStream 对象,或者
保存图像 URL 的字符串变量。
//将 FileInputStream 对象作为参数传递 FileInputStream inputstream = new FileInputStream("C:\images\image.jpg"); Image image = new Image(inputstream); //从 URL 加载图像 //Image image = new Image(new FileInputStream("url for the image));
加载图像后,您可以通过实例化 ImageView 类并将图像传递给其构造函数来设置图像的视图,如下所示 −
ImageView imageView = new ImageView(image);
示例
以下示例演示了如何在 JavaFX 中加载图像并设置视图。
将此代码保存在名为 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 { //创建图像 Image image = new Image(new FileInputStream("图像路径")); //设置图像视图 ImageView imageView = new ImageView(image); //设置图像的位置 imageView.setX(50); imageView.setY(25); //设置图像视图的适合高度和宽度 imageView.setFitHeight(455); imageView.setFitWidth(500); //设置图像视图的保留比例 imageView.setPreserveRatio(true); //创建 Group 对象 Group root = new Group(imageView); //创建场景对象 Scene scene = new Scene(root, 600, 500); //设置 Stage 的标题 stage.setTitle("正在加载图像"); //将场景添加到舞台(Stage) stage.setScene(scene); //显示舞台(Stage)内容 stage.show(); } public static void main(String args[]) { launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
Javac ImageExample.java java ImageExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 −
图像的多个视图
您还可以在同一场景中为图像设置多个视图。以下程序是一个示例,演示了如何在 JavaFX 中为场景中的图像设置各种视图。
将此代码保存在名为 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 { //创建图像 Image image = new Image(new FileInputStream("file path")); //设置图像视图 1 ImageView imageView1 = new ImageView(image); //设置图像的位置 imageView1.setX(50); imageView1.setY(25); //设置图像视图的适合高度和宽度 imageView1.setFitHeight(300); imageView1.setFitWidth(250); //设置图像视图的保留比例 imageView1.setPreserveRatio(true); //设置图像视图 2 ImageView imageView2 = new ImageView(image); //设置图像的位置 imageView2.setX(350); imageView2.setY(25); //设置图像视图的适合高度和宽度 imageView2.setFitHeight(150); imageView2.setFitWidth(250); //设置图像视图的保留比例 imageView2.setPreserveRatio(true); //设置图像视图 3 ImageView imageView3 = new ImageView(image); //设置图像的位置 imageView3.setX(350); imageView3.setY(200); //设置图像视图的适合高度和宽度 imageView3.setFitHeight(100); imageView3.setFitWidth(100); //设置图像视图的保留比例 imageView3.setPreserveRatio(true); //创建 Group 对象 Group root = new Group(imageView1, imageView2, imageView3); //创建场景对象 Scene scene = new Scene(root, 600, 400); //设置舞台(Stage)标题 stage.setTitle("一张图片的多个视图"); //将场景添加到舞台(Stage) stage.setScene(scene); //显示舞台(Stage)内容 stage.show(); } public static void main(String args[]) { launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
Javac MultipleViews.java java MultipleViews
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 −
写入像素
JavaFX 提供名为 PixelReader 和 PixelWriter 的类来读取和写入图像的像素。WritableImage 类用于创建可写图像。
以下示例演示了如何读取和写入图像的像素。在这里,我们读取图像的颜色值并使其变暗。
将此代码保存在名为 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 { //创建图像 Image image = new Image(new FileInputStream("C:\images\logo.jpg")); int width = (int)image.getWidth(); int height = (int)image.getHeight(); //创建可写图像 WritableImage wImage = new WritableImage(width, height); //从加载的图像中读取颜色 PixelReader pixelReader = image.getPixelReader(); //获取像素写入器 PixelWriter writer = wImage.getPixelWriter(); //读取图像的颜色 for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { //检索已加载图像的像素的颜色 Color color = pixelReader.getColor(x, y); //将颜色设置为可写图像 writer.setColor(x, y, color.darker()); } } //设置可写图像的视图 ImageView imageView = new ImageView(wImage); //创建 Group 对象 Group root = new Group(imageView); //创建场景对象 Scene scene = new Scene(root, 600, 500); //将标题设置为舞台(Stage) stage.setTitle("Writing pixels "); //将场景添加到舞台(Stage) stage.setScene(scene); //显示舞台(Stage)内容 stage.show(); } public static void main(String args[]) { launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
Javac WritingPixelsExample.java java WritingPixelsExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 −