如何使用 JavaFX 反转图像颜色?
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 { //creating the image object InputStream stream = new FileInputStream("D:\images\elephant.jpg"); Image image = new Image(stream); //Reading the pixels PixelReader reader = image.getPixelReader(); //Writing the read pixels int w = (int)image.getWidth(); int h = (int)image.getHeight(); WritableImage wImage = new WritableImage(w, h); PixelWriter writer = wImage.getPixelWriter(); //Reading the color of the image 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()); } } //Creating the image view ImageView imageView = new ImageView(); //Setting image to the image view imageView.setImage(wImage); //Setting the image view parameters imageView.setX(10); imageView.setY(10); imageView.setFitWidth(575); imageView.setPreserveRatio(true); //Setting the Scene object 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); } }
输出
广告