package com.itdominator.tilemaper; import javafx.stage.Stage; import javafx.stage.DirectoryChooser; import javafx.stage.FileChooser; import javafx.scene.canvas.Canvas; import javafx.scene.image.WritableImage; import javafx.scene.SnapshotParameters; import javafx.scene.layout.VBox; import javafx.scene.image.ImageView; import javafx.scene.image.Image; import javafx.scene.image.WritableImage; import javafx.embed.swing.SwingFXUtils; import java.awt.image.RenderedImage; import java.awt.image.PixelGrabber ; import java.awt.Color; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import java.lang.InterruptedException; class SaveController { // Generics private DirectoryChooser folderChooser = new DirectoryChooser(); private FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter( "png files (*.png)", "*.png"); private File directory; public void saveCanvas(Canvas canvas, SnapshotParameters params) { FileChooser fileChooser = new FileChooser(); Stage stage = new Stage(); int width = (int) canvas.getWidth(); int height = (int) canvas.getHeight(); fileChooser.getExtensionFilters().add(extFilter); File file = fileChooser.showSaveDialog(stage); if(file != null){ try { WritableImage writableImage = new WritableImage(width, height); canvas.snapshot(params, writableImage); RenderedImage renderedImage = SwingFXUtils.fromFXImage(writableImage, null); ImageIO.write(renderedImage, "png", file); } catch (IOException ex) { } } } public void saveTilesToImages(Canvas canvas, SnapshotParameters params, VBox tileImagesVbox) { int tilesCount = tileImagesVbox.getChildren().size(); int width = (int) canvas.getWidth(); int height = (int) canvas.getHeight(); try { Stage stage = new Stage(); directory = folderChooser.showDialog(stage); System.out.println("Saving images to: " + directory); for (int i = 0; i < tilesCount; i++) { ImageView iView = (ImageView) tileImagesVbox.getChildren().get(i); Image img = iView.getImage(); RenderedImage renderedImage = SwingFXUtils.fromFXImage(img, null); boolean isValid = false; int[] pixels = new int[width * height]; java.awt.Image awImg = SwingFXUtils.fromFXImage(img, null); PixelGrabber pg = new PixelGrabber(awImg, 0, 0, width, height, pixels, 0, width); pg.grabPixels(); // checking to see if image has any pixils or is purly transparent for (int pixel : pixels) { Color color = new Color(pixel); if (color.getRGB() == Color.WHITE.getRGB() || color.getRGB() == Color.RED.getRGB() || color.getRGB() == Color.BLUE.getRGB() || color.getRGB() == Color.GREEN.getRGB()) { isValid = true; break; } } if (isValid == true) { File file = new File(directory + "/" + (i + 1) + ".png"); ImageIO.write(renderedImage, "png", file); } } } catch (IOException ex) { return; } catch (InterruptedException ex) { return; } } }