
- 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 視窗,如下所示:
