如何使用 JavaFX 反转图像的颜色?
javafxobject oriented programmingprogramming更新于 2026/1/4 3:24:17
JavaFX 在 javafx.scene.image 中提供了两个接口,分别是 PixelReader 和 PixelWriter。使用它们提供的方法,您可以读取和写入图像的内容,例如像素、颜色值等。
您可以分别使用 getPixelReader() 和 getPixelWriter() 方法获取这些接口的对象。
要反转图像 −
通过传递所需图像的 URL(字符串)来创建 InputStream 对象。
绕过上面创建的输入流对象作为参数来实例化 Image 类。
使用相应的方法获取已加载图像的 PixelReader 和 PixelWriter 对象。
使用 ImageReader 类的 getColor() 方法读取图像的每个颜色值。
使用javafx.scene.paint.Color 类的 invert() 方法。
使用 ImageWriter 类的 setColor() 方法将反转的颜色值设置为图像。
最后,使用 ImageView 显示结果图像。
示例
以下 JavaFX 程序读取图像的像素,反转颜色值并显示结果 −
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
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 ReadingWritingPixels extends Application {
public void start(Stage stage) throws IOException {
//创建图像对象
InputStream stream = new FileInputStream("D:\images\elephant.jpg");
Image image = new Image(stream);
//读取像素
PixelReader reader = image.getPixelReader();
//写入读取的像素
int w = (int)image.getWidth();
int h = (int)image.getHeight();
WritableImage wImage = new WritableImage(w, h);
PixelWriter writer = wImage.getPixelWriter();
//读取图像的颜色
for(int y = 0; y < h; y++) {
for(int x = 0; x < w; x++) {
//Retrieving the color of the pixel of the loaded image
Color color = reader.getColor(x, y);
//Setting the color to the writable image
writer.setColor(x, y, color.invert());
}
}
//创建图像视图
ImageView imageView = new ImageView();
//将图像设置为图像视图
imageView.setImage(wImage);
//设置图像视图参数
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
//设置场景对象
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 370, Color.BEIGE);
stage.setTitle("Reading/Writing Pixels");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
输出


