- JavaFX 教程
- JavaFX - 首頁
- JavaFX - 概述
- JavaFX 安裝和架構
- JavaFX - 環境
- JavaFX - 使用 Netbeans 安裝
- JavaFX - 使用 Eclipse 安裝
- JavaFX - 使用 Visual Studio Code 安裝
- JavaFX - 架構
- JavaFX - 應用程式
- JavaFX 2D 形狀
- JavaFX - 2D 形狀
- JavaFX - 繪製直線
- JavaFX - 繪製矩形
- JavaFX - 繪製圓角矩形
- JavaFX - 繪製圓形
- JavaFX - 繪製橢圓
- JavaFX - 繪製多邊形
- JavaFX - 繪製折線
- JavaFX - 繪製三次貝塞爾曲線
- JavaFX - 繪製二次貝塞爾曲線
- JavaFX - 繪製弧形
- JavaFX - 繪製 SVG 路徑
- JavaFX 2D 物件屬性
- JavaFX - 描邊型別屬性
- JavaFX - 描邊寬度屬性
- JavaFX - 描邊填充屬性
- JavaFX - 描邊屬性
- JavaFX - 描邊線連線屬性
- JavaFX - 描邊斜接限制屬性
- JavaFX - 描邊線端點屬性
- JavaFX - 平滑屬性
- JavaFX 路徑物件
- JavaFX - 路徑物件
- JavaFX - LineTo 路徑物件
- JavaFX - HLineTo 路徑物件
- JavaFX - VLineTo 路徑物件
- JavaFX - QuadCurveTo 路徑物件
- JavaFX - CubicCurveTo 路徑物件
- JavaFX - ArcTo 路徑物件
- JavaFX 顏色和紋理
- JavaFX - 顏色
- JavaFX - 線性漸變圖案
- JavaFX - 徑向漸變圖案
- JavaFX 文字
- JavaFX - 文字
- JavaFX 效果
- JavaFX - 效果
- JavaFX - 顏色調整效果
- JavaFX - 顏色輸入效果
- JavaFX - 圖片輸入效果
- JavaFX - 混合效果
- JavaFX - 輝光效果
- JavaFX - 發光效果
- JavaFX - 方框模糊效果
- JavaFX - 高斯模糊效果
- JavaFX - 運動模糊效果
- JavaFX - 反射效果
- JavaFX - 棕褐色效果
- JavaFX - 陰影效果
- JavaFX - 投影陰影效果
- JavaFX - 內陰影效果
- JavaFX - 光照效果
- JavaFX - 光源.遠光效果
- JavaFX - 光源.聚光燈效果
- JavaFX - 光源.點光源效果
- JavaFX - 位移貼圖
- JavaFX - 透視變換
- JavaFX 動畫
- JavaFX - 動畫
- JavaFX - 旋轉轉換
- JavaFX - 縮放轉換
- JavaFX - 平移轉換
- JavaFX - 淡入淡出轉換
- JavaFX - 填充轉換
- JavaFX - 描邊轉換
- JavaFX - 順序轉換
- JavaFX - 並行轉換
- JavaFX - 暫停轉換
- JavaFX - 路徑轉換
- JavaFX 圖片
- JavaFX - 圖片
- JavaFX 3D 形狀
- JavaFX - 3D 形狀
- JavaFX - 建立立方體
- JavaFX - 建立圓柱體
- JavaFX - 建立球體
- JavaFX 事件處理
- JavaFX - 事件處理
- JavaFX - 使用便捷方法
- JavaFX - 事件過濾器
- JavaFX - 事件處理器
- JavaFX UI 控制元件
- JavaFX - UI 控制元件
- JavaFX - 列表檢視
- JavaFX - 手風琴
- JavaFX - 按鈕欄
- JavaFX - 選擇框
- JavaFX - HTMLEditor
- JavaFX - 選單欄
- JavaFX - 分頁
- JavaFX - 進度指示器
- JavaFX - 滾動窗格
- JavaFX - 分隔符
- JavaFX - 滑塊
- JavaFX - 微調器
- JavaFX - 分割窗格
- JavaFX - 表格檢視
- JavaFX - 標籤頁窗格
- JavaFX - 工具欄
- JavaFX - 樹檢視
- JavaFX - 標籤
- JavaFX - 複選框
- JavaFX - 單選按鈕
- JavaFX - 文字欄位
- JavaFX - 密碼欄位
- JavaFX - 檔案選擇器
- JavaFX - 超連結
- JavaFX - 工具提示
- JavaFX - 警報
- JavaFX - 日期選擇器
- JavaFX - 文字區域
- JavaFX 圖表
- JavaFX - 圖表
- JavaFX - 建立餅圖
- JavaFX - 建立折線圖
- JavaFX - 建立面積圖
- JavaFX - 建立條形圖
- JavaFX - 建立氣泡圖
- JavaFX - 建立散點圖
- JavaFX - 建立堆疊面積圖
- JavaFX - 建立堆疊條形圖
- JavaFX 佈局面板
- JavaFX - 佈局面板
- JavaFX - HBox 佈局
- JavaFX - VBox 佈局
- JavaFX - BorderPane 佈局
- JavaFX - StackPane 佈局
- JavaFX - TextFlow 佈局
- JavaFX - AnchorPane 佈局
- JavaFX - TilePane 佈局
- JavaFX - GridPane 佈局
- JavaFX - FlowPane 佈局
- JavaFX CSS
- JavaFX - CSS
- JavaFX 多媒體
- JavaFX - 處理多媒體
- JavaFX - 播放影片
- JavaFX 有用資源
- JavaFX - 快速指南
- JavaFX - 有用資源
- JavaFX - 討論
JavaFX - 圖片
圖片是任何應用程式(包括 JavaFX 應用程式)中最常用的元素之一。圖片可以有多種形式,例如照片、圖形或單個影片幀等。JavaFX 還支援各種數字圖片格式,例如:
BMP
GIF
JPEG
PNG
您可以使用 JavaFX 在包 **javafx.scene.image** 中提供的類載入和修改上述所有格式的圖片。
本章將教您如何將圖片載入到 JavaFX 中,如何在多個檢視中投影圖片,以及如何更改圖片的畫素。
載入圖片
您可以透過例項化包 **javafx.scene.image** 中名為 **Image** 的類來載入 JavaFX 中的圖片。
對於 Image 類的建構函式,您必須傳遞以下任一項作為圖片源:
要載入的圖片的 **InputStream** 物件,或
包含圖片 **URL** 的字串變數。
圖片在載入時也可以調整大小,以減少其記憶體儲存量。這可以透過向 Image 類的建構函式傳遞以下可選引數來完成。
**requestedWidth** 用於設定顯示圖片的目標寬度。
**requestedHeight** 用於設定顯示圖片的目標高度。
**preserveRatio** 是一個布林值,用於指定最終圖片的縱橫比是否必須與原始圖片相同。
**smooth** 表示應用於圖片的濾鏡質量。
**backgroundLoading** 表示圖片是否需要在後臺載入。
載入圖片後,您可以透過例項化 ImageView 類來檢視它。多個 ImageView 類可以使用相同的圖片例項來顯示它。
語法
以下是載入和檢視圖片的語法:
//Passing FileInputStream object as a parameter
FileInputStream inputstream = new FileInputStream("C:\\images\\image.jpg");
Image image = new Image(inputstream);
//Loading image from URL
//Image image = new Image(new FileInputStream("url for the image));
載入圖片後,您可以透過例項化 **ImageView** 類並將圖片傳遞給它的建構函式來設定圖片的檢視,如下所示:
ImageView imageView = new ImageView(image);
示例
以下示例演示瞭如何在 JavaFX 中載入圖片並設定檢視。
將此程式碼儲存在名為 **ImageExample.java** 的檔案中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class ImageExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("path of the image"));
//Setting the image view
ImageView imageView = new ImageView(image);
//Setting the position of the image
imageView.setX(50);
imageView.setY(25);
//setting the fit height and width of the image view
imageView.setFitHeight(455);
imageView.setFitWidth(500);
//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Loading an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls ImageExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls ImageExample
輸出
執行後,上述程式將生成一個 JavaFX 視窗,如下所示:
示例
在這個例子中,讓我們嘗試透過傳遞最終尺寸和濾鏡質量到 Image 類的建構函式來調整圖片大小(例如之前的輸出圖片)。將程式碼儲存在名為 **ResizedImageExample.java** 的檔案中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class ResizedImageExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
FileInputStream fis = new FileInputStream("C:/Apache24/htdocs/javafx/images/loading_image.jpg");
Image image = new Image(fis, 250, 300, false, false);
//Setting the image view
ImageView imageView = new ImageView(image);
//Setting the position of the image
imageView.setX(50);
imageView.setY(25);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Loading an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls ResizedImageExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls ResizedImageExample
輸出
執行後,上述程式將生成一個 JavaFX 視窗,如下所示:
圖片的多個檢視
在某些情況下,應用程式需要以不同的方式顯示圖片:具有不同的尺寸、更好的質量、縮放後等等。
無需每次需要不同檢視的圖片時都建立一個新的應用程式,JavaFX 允許您在同一場景中為圖片設定多個檢視。一旦使用 Image 類載入圖片,就可以透過多次例項化 ImageView 類來建立多個 ImageView 物件。
ImageView 類是一個 JavaFX 節點,它繪製使用 Image 類載入的圖片。為了顯示圖片的多個檢視,可以在 Application 類的 start() 方法中多次例項化此類。
這些多個檢視的大小、質量可能有所不同,也可能是原始圖片的精確副本。
但是,要做到這一點,您需要傳遞 Image 物件或源圖片的 URL 字串。建立 ImageView 物件的語法如下:
語法
// A new ImageView object is allocated ImageView = new ImageView() // ImageView object is allocated using // the given Image object ImageView imageview = new ImageView(Image image) // ImageView object is allocated using // the image loaded from a URL ImageView imageview = new ImageView(String URL)
示例
以下程式是一個示例,演示瞭如何在 JavaFX 的場景中為圖片設定各種檢視。
將此程式碼儲存在名為 **MultipleViews.java** 的檔案中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class MultipleViews extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("file path"));
//Setting the image view 1
ImageView imageView1 = new ImageView(image);
//Setting the position of the image
imageView1.setX(50);
imageView1.setY(25);
//setting the fit height and width of the image view
imageView1.setFitHeight(300);
imageView1.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView1.setPreserveRatio(true);
//Setting the image view 2
ImageView imageView2 = new ImageView(image);
//Setting the position of the image
imageView2.setX(350);
imageView2.setY(25);
//setting the fit height and width of the image view
imageView2.setFitHeight(150);
imageView2.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView2.setPreserveRatio(true);
//Setting the image view 3
ImageView imageView3 = new ImageView(image);
//Setting the position of the image
imageView3.setX(350);
imageView3.setY(200);
//setting the fit height and width of the image view
imageView3.setFitHeight(100);
imageView3.setFitWidth(100);
//Setting the preserve ratio of the image view
imageView3.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView1, imageView2, imageView3);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting title to the Stage
stage.setTitle("Multiple views of an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls MultipleViews.java java --module-path %PATH_TO_FX% --add-modules javafx.controls MultipleViews
輸出
執行後,上述程式將生成一個 JavaFX 視窗,如下所示:
讀取和寫入圖片畫素
圖片的讀取和寫入在資料處理技術中很常見。圖片從根本上是由多個畫素組成的二維網格。它可以與人體細胞相關聯;因為它們包含圖片中的資訊。
因此,為了讀取和寫入圖片,我們通常指的是讀取和寫入其畫素。
JavaFX 還提供各種類和介面,例如 WritableImage、PixelReader、PixelWriter,以便讀取和寫入此類圖片畫素。
WritableImage 類用於根據應用程式提供的畫素或 PixelReader 物件從各種來源(包括檔案或 URL 中的圖片)讀取的畫素來構建自定義圖形圖片。
JavaFX 提供名為 **PixelReader** 和 **PixelWriter** 的介面來讀取和寫入圖片的畫素。
示例
以下示例演示瞭如何讀取和寫入圖片的畫素。在這裡,我們正在讀取圖片的顏色值並使其變暗。
將此程式碼儲存到名為WritingPixelsExample.java的檔案中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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 WritingPixelsExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("C:\\images\\logo.jpg"));
int width = (int)image.getWidth();
int height = (int)image.getHeight();
//Creating a writable image
WritableImage wImage = new WritableImage(width, height);
//Reading color from the loaded image
PixelReader pixelReader = image.getPixelReader();
//getting the pixel writer
PixelWriter writer = wImage.getPixelWriter();
//Reading the color of the image
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
//Retrieving the color of the pixel of the loaded image
Color color = pixelReader.getColor(x, y);
//Setting the color to the writable image
writer.setColor(x, y, color.darker());
}
}
//Setting the view for the writable image
ImageView imageView = new ImageView(wImage);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Writing pixels ");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls WritingPixelsExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls WritingPixelsExample
輸出
執行後,上述程式將生成一個 JavaFX 視窗,如下所示: