Javaで画像を拡大したり縮小したりして、同時にウィンドウサイズも変換後の画像サイズに合わせる。
JavaFX の ImageView クラスにある拡大縮小機能を使用した。
tiff 画像も読み込みたいので、昔ながらの ImageIO.read メソッドを使用した。
JavaFX の Image クラスは tiff をサポートしていなかった。
ポイントは、imageView クラスの setFitWidth / setFitHeight メソッドを使用しているところ。
setScaleX / setScaleY メソッドを使って拡大縮小すると、描画幅は変わらないため、縮小時は画像の外周が白くなった。
package application; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.layout.BorderPane; import javax.imageio.ImageIO; // Tiff を読み込むため import java.awt.image.BufferedImage; import java.io.File; import javafx.embed.swing.SwingFXUtils; public class Main extends Application { @Override public void start(Stage primaryStage) { try { // 画像を読み込み (tiff を読み込むため ImageIO を使う) String fname = new String("lena.jpg"); BufferedImage bufferedImage = ImageIO.read(new File(fname)); WritableImage writableImage = SwingFXUtils.toFXImage(bufferedImage, null); ImageView imageView = new ImageView(writableImage); // resize double width = imageView.getImage().getWidth(); double height = imageView.getImage().getHeight(); imageView.setFitWidth(width * 0.5); imageView.setFitHeight(height * 0.5); // 描画 BorderPane root = new BorderPane(); root.getChildren().add(imageView); // ウィンドウサイズを縮小した画像サイズにして表示する Scene scene = new Scene(root, imageView.getFitWidth(), imageView.getFitHeight()); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }