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

廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP