如何使用 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);
   }
}

输出

更新于: 2020-05-16

769 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告