85 lines
2.7 KiB
Java
85 lines
2.7 KiB
Java
package ctbrec.ui.action;
|
|
|
|
import java.awt.Graphics2D;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import ctbrec.Config;
|
|
import ctbrec.Model;
|
|
import ctbrec.event.EventBusHolder;
|
|
import javafx.scene.Node;
|
|
|
|
public abstract class AbstractPortraitAction {
|
|
private static final Logger LOG = LoggerFactory.getLogger(AbstractPortraitAction.class);
|
|
public static final String FORMAT = "jpg";
|
|
|
|
protected Node source;
|
|
protected Model model;
|
|
|
|
protected BufferedImage convertToScaledJpg(BufferedImage original) {
|
|
java.awt.Image scaledPortrait = original.getScaledInstance(-1, 256, java.awt.Image.SCALE_SMOOTH);
|
|
BufferedImage bimage = new BufferedImage(scaledPortrait.getWidth(null), scaledPortrait.getHeight(null), BufferedImage.TYPE_INT_RGB);
|
|
Graphics2D bGr = bimage.createGraphics();
|
|
bGr.drawImage(scaledPortrait, 0, 0, null);
|
|
bGr.dispose();
|
|
return bimage;
|
|
}
|
|
|
|
protected boolean copyToCacheAsJpg(String portraitId, BufferedImage portrait) throws IOException {
|
|
File output = getPortraitFile(portraitId);
|
|
Files.createDirectories(output.getParentFile().toPath());
|
|
LOG.debug("Writing scaled portrait to {}", output);
|
|
return ImageIO.write(portrait, FORMAT, output);
|
|
}
|
|
|
|
protected File getPortraitFile(String portraitId) {
|
|
File configDir = Config.getInstance().getConfigDir();
|
|
File portraitDir = new File(configDir, "portraits");
|
|
File output = new File(portraitDir, portraitId + '.' + FORMAT);
|
|
return output;
|
|
}
|
|
|
|
protected BufferedImage cropImage(BufferedImage img) {
|
|
int w = img.getWidth();
|
|
int h = img.getHeight();
|
|
if (w > h) {
|
|
return cropSides(img);
|
|
} else {
|
|
return cropTopAndBottom(img);
|
|
}
|
|
}
|
|
|
|
protected BufferedImage cropSides(BufferedImage img) {
|
|
int overlap = img.getWidth() - img.getHeight();
|
|
return img.getSubimage(overlap / 2, 0, img.getHeight(), img.getHeight());
|
|
}
|
|
|
|
protected BufferedImage cropTopAndBottom(BufferedImage img) {
|
|
int overlap = img.getHeight() - img.getWidth();
|
|
return img.getSubimage(0, overlap/2, img.getWidth(), img.getWidth());
|
|
}
|
|
|
|
protected void firePortraitChanged() {
|
|
EventBusHolder.BUS.post(new PortraitChangedEvent(model));
|
|
}
|
|
|
|
public static class PortraitChangedEvent {
|
|
private Model mdl;
|
|
|
|
public PortraitChangedEvent(Model model) {
|
|
this.mdl = model;
|
|
}
|
|
|
|
public Model getModel() {
|
|
return mdl;
|
|
}
|
|
}
|
|
}
|