/* * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. */ package helloworld; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javafx.application.Application; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.stage.Stage; import javax.imageio.ImageIO; /** * @author Kirill */ public class HelloBufferedImageExport extends Application { private static final String[] imageFile1 = { "png", "resultBlue,A=.5f.png" }; private static final String[] imageFile2 = { "png", "result0000.png" }; private static final String[] imageFile3 = { "jpg", "result.jpg" }; private static final String[] imageFile4 = { "png", "result.png" }; @Override public void start(Stage stage) { stage.setTitle("Hello BufferedImage Save" + imageFile1[1]); // simple color scenes Scene scene = new Scene(new Group(), 500, 300); scene.setFill(Color.color(0,0,1,0.5)); WritableImage img = scene.snapshot(null); System.err.println("img: size = (" + img.getWidth() + ", " + img.getHeight() + ")"); BufferedImage bi1 = SwingFXUtils.fromFXImage(img, null); scene.setFill(Color.color(0,0,0,0)); img = scene.snapshot(null); BufferedImage bi2 = SwingFXUtils.fromFXImage(img, null); // complex scene Scene scene2 = SceneFacrory.create(); img = scene2.snapshot(null); BufferedImage bi3 = SwingFXUtils.fromFXImage(img, new BufferedImage(1, 1, BufferedImage.TYPE_3BYTE_BGR)); assert bi1 != null; assert bi2 != null; assert bi3 != null; assert ((BufferedImage)bi3).getType() == BufferedImage.TYPE_3BYTE_BGR; writeImageToFile(bi1, imageFile1); writeImageToFile(bi2, imageFile2); writeImageToFile(bi3, imageFile3); writeImageToFile(bi3, imageFile4); Group g = new Group(new ImageView(SwingFXUtils.toFXImage(bi3, null))); stage.setScene(new Scene(g, 500, 300)); stage.show(); } public static void main(String[] args) { Application.launch(args); } public static void writeImageToFile(Object obj, String[] imageFile) { BufferedImage bi = (BufferedImage)obj; File outputfile = new File(imageFile[1]); try { ImageIO.write(bi, imageFile[0], outputfile); } catch (IOException ex) { System.out.println("Error friting image to file "+imageFile[1] +", format "+imageFile[0]); ex.printStackTrace(System.out); } } } class SceneFacrory { public static Scene create() { Group g = new Group(); Scene scene = new Scene(g, 500, 300); Scene sceneRTa = createSceneA(); WritableImage img1 = sceneRTa.snapshot(null); Scene sceneRTb = createSceneB(); WritableImage img2 = sceneRTb.snapshot(null); ImageView iv1 = new ImageView(img1); iv1.setScaleX(0.5); iv1.setScaleY(0.5); g.getChildren().add(iv1); ImageView iv2 = new ImageView(img2); iv2.setTranslateX(200); iv2.setTranslateY(0); iv2.setScaleX(0.5); iv2.setScaleY(0.5); g.getChildren().add(iv2); Text l= new Text(50, 50, "Another Text Label"); g.getChildren().add(l); return scene; } private static Scene createSceneB() { Group gRT = new Group(); Scene sceneRT = new Scene(gRT, 300, 300); Text l = new Text(100, 50, "Another Text Label"); sceneRT.setFill(Color.GRAY); Image img = loadImage("Green Apple.gif"); ImageView imageView = new ImageView(img); imageView.setX(50); imageView.setY(50); imageView.setFitWidth(100); imageView.setFitHeight(100); gRT.getChildren().add(imageView); gRT.getChildren().add(l); Circle circ = new Circle(50, 50, 20, Color.ORANGE); gRT.getChildren().add(circ); return sceneRT; } private static Scene createSceneA() { Group group = new Group( new Rectangle(10, 10, 50, 50) { { setFill(Color.BLUE); setStroke(Color.GREEN); setArcWidth(10); setArcHeight(10); } }, new Rectangle(60, 10, 50, 50) { { setFill(Color.BLUE); setStroke(Color.RED); } }, new Rectangle(110, 10, 50, 50) { { setFill(Color.WHITE); setStroke(Color.BLUE); } }); Scene scene = new Scene(group, 300, 300); scene.setFill(Color.BLACK); for (int x = 0; x < 10; x++) { for (int y = 0; y < 10; y++) { Rectangle rect = new Rectangle( x * 10 + y * 0.1f + 10, x * 0.1f + y * 10 + 100, 5, 5); rect.setFill(Color.RED); group.getChildren().add(rect); } } return scene; } private static Image loadImage(String name) { java.net.URL url = SceneFacrory.class.getResource(name); if (url!=null) { String st = url.toString(); return new Image(st); } else return null; } }