21xrx.com
2025-04-12 16:33:45 Saturday
文章检索 我的文章 写文章
Java实现图像处理并生成WritableImage
2023-06-14 12:58:13 深夜i     32     0
Java图像处理 WritableImage JavaFX图像处理

在Java程序中,通过使用WritableImage类,我们可以对图像进行处理并生成新的图像。WritableImage类允许我们以像素为单位直接操作图像的数据。

下面是一个简单的Java程序,演示了如何使用WritableImage类实现图像处理和生成。

import java.io.File;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
public class ImageProcessing extends Application {
  private static final int WIDTH = 800;
  private static final int HEIGHT = 600;
  @Override
  public void start(Stage primaryStage) throws Exception {
    // 读取图像
    File file = new File("input.jpg");
    Image inputImage = new Image(file.toURI().toString());
    // 创建WrtiableImage对象
    WritableImage outputImage = new WritableImage((int) inputImage.getWidth(), (int) inputImage.getHeight());
    // 获取PixelReader和PixelWriter对象
    PixelReader pixelReader = inputImage.getPixelReader();
    PixelWriter pixelWriter = outputImage.getPixelWriter();
    // 遍历整个图像,并对每一个像素进行处理
    for(int x = 0; x < inputImage.getWidth(); x++) {
      for(int y = 0; y < inputImage.getHeight(); y++) {
        Color color = pixelReader.getColor(x, y);
        // 图像处理代码,这里我们将每个像素都变成黑色和白色中的一种
        if(color.getRed() + color.getGreen() + color.getBlue() > 1.5) {
          pixelWriter.setColor(x, y, Color.WHITE);
        } else {
          pixelWriter.setColor(x, y, Color.BLACK);
        }
      }
    }
    // 将WritableImage对象写入文件
    File outputFile = new File("output.png");
    ImageIO.write(SwingFXUtils.fromFXImage(outputImage, null), "png", outputFile);
    // 显示处理后的图像
    Group root = new Group();
    root.getChildren().add(outputImageView);
    Scene scene = new Scene(root, WIDTH, HEIGHT);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] args) {
    launch(args);
  }
}

在上面的程序中,我们首先使用Image类读取了一个图像文件,然后创建了一个WritableImage对象作为输出图像。接着,我们获取了两个非常重要的对象:PixelReader和PixelWriter。

PixelReader对象允许我们直接读取每一个像素的RGB值,并进行自定义的图像处理。我们使用两个嵌套的for循环遍历了整个图像,对每个像素进行了处理。

在这个程序中,我们只是简单地将每个像素都变成黑色和白色中的一种。实际上,我们可以根据需要对每个像素进行更加复杂的处理。

最后,我们将输出图像写入了一个文件,并使用JavaFX显示了输出图像。

  
  

评论区