96 lines
3.6 KiB
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; }
|
|
}
|
|
}
|