JavaFX在javafx.scene.image中提供了两个接口,分别是PixelReader和PixelWriter。使用他们提供的方法,您可以读取和写入图像的内容,例如像素,颜色值等。
您可以分别使用getPixelReader()和getPixelWriter()方法获取这些接口的对象。
反转图像-
通过传递所需图像的URL(String)创建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++) { //检索已加载图像的像素的颜色 Color color = reader.getColor(x, y); //将颜色设置为可写图像 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); } }
输出结果