JavaFX - รูปภาพ
คุณสามารถโหลดและแก้ไขอิมเมจโดยใช้คลาสที่ JavaFX จัดเตรียมไว้ในแพ็กเกจ javafx.scene.image. JavaFX รองรับรูปแบบภาพเช่นBmp, Gif, Jpeg, Png.
บทนี้จะสอนวิธีโหลดภาพใน JavaFX วิธีฉายภาพในหลายมุมมองและวิธีแก้ไขพิกเซลของภาพ
กำลังโหลดรูปภาพ
คุณสามารถโหลดอิมเมจใน JavaFX โดยสร้างอินสแตนซ์คลาสที่ชื่อ Image ของแพ็คเกจ javafx.scene.image.
ในการสร้างชั้นเรียนคุณต้องผ่านข้อใดข้อหนึ่งต่อไปนี้ -
อัน InputStream วัตถุของภาพที่จะโหลดหรือ
ตัวแปรสตริงที่มี URL สำหรับรูปภาพ
//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 ImageExample.java
java ImageExample
ในการดำเนินการโปรแกรมด้านบนจะสร้างหน้าต่าง JavaFX ดังนี้ -
มุมมองหลายภาพ
คุณยังสามารถตั้งค่าหลายมุมมองสำหรับรูปภาพในฉากเดียวกันได้ โปรแกรมต่อไปนี้เป็นตัวอย่างที่สาธิตวิธีการตั้งค่ามุมมองต่างๆสำหรับภาพในฉากใน 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 MultipleViews.java
java MultipleViews
ในการดำเนินการโปรแกรมด้านบนจะสร้างหน้าต่าง JavaFX ดังนี้ -
การเขียนพิกเซล
JavaFX จัดเตรียมคลาสที่ชื่อ PixelReader และ PixelWriterคลาสเพื่ออ่านและเขียนพิกเซลของภาพ WritableImage คลาสใช้ในการสร้างรูปภาพที่เขียนได้
ต่อไปนี้เป็นตัวอย่างที่สาธิตวิธีการอ่านและเขียนพิกเซลของภาพ ที่นี่เรากำลังอ่านค่าสีของรูปภาพและทำให้มืดลง
บันทึกรหัสนี้ในไฟล์ที่มีชื่อ 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 WritingPixelsExample.java
java WritingPixelsExample
ในการดำเนินการโปรแกรมด้านบนจะสร้างหน้าต่าง JavaFX ดังนี้ -