Deprecated-Unsupported/Java Peojects/TileMaper/src/SaveController.java

96 lines
3.6 KiB
Java

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; }
}
}