|
|
|
@ -11,10 +11,17 @@ import xyz.wbsite.jmacro.util.Logger;
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
import java.awt.event.*;
|
|
|
|
|
import java.awt.event.KeyAdapter;
|
|
|
|
|
import java.awt.event.KeyEvent;
|
|
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
|
import java.awt.event.MouseMotionAdapter;
|
|
|
|
|
import java.awt.event.WindowAdapter;
|
|
|
|
|
import java.awt.event.WindowEvent;
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
|
import java.util.prefs.Preferences;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -201,8 +208,7 @@ public class PickLegend extends JFrame {
|
|
|
|
|
// 上一次保存目录
|
|
|
|
|
String lastPath = preferences.get(LAST_PATH, "");
|
|
|
|
|
// 默认文件名
|
|
|
|
|
String location = "L" + (getCaptureX() - originX) + "," + (getCaptureY() - originY);
|
|
|
|
|
String filename = StrUtil.format("{}#{}.png", System.currentTimeMillis(), location);
|
|
|
|
|
String filename = StrUtil.format("{}.png", System.currentTimeMillis());
|
|
|
|
|
|
|
|
|
|
JFileChooser jFileChooser = new JFileChooser();
|
|
|
|
|
jFileChooser.setFileFilter(new FileNameExtensionFilter("png", "png"));
|
|
|
|
@ -211,38 +217,61 @@ public class PickLegend extends JFrame {
|
|
|
|
|
jFileChooser.setSelectedFile(new File(filename));
|
|
|
|
|
int returnVal = jFileChooser.showSaveDialog(this);
|
|
|
|
|
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
|
|
|
|
// 默认文件
|
|
|
|
|
File file = jFileChooser.getSelectedFile();
|
|
|
|
|
String name = file.getName().replaceAll("\\.png", "");
|
|
|
|
|
String legendName = name.split("#")[0];
|
|
|
|
|
String prefix = legendName + "#";
|
|
|
|
|
|
|
|
|
|
List<File> files = FileUtil.loopFiles(Legend.getDefaultBase(), pathname -> pathname.getName().startsWith(prefix));
|
|
|
|
|
if (files.size() > 0) {
|
|
|
|
|
DialogUtil.confirm("提示", "存在相同图例,是否旧的删除?", result -> {
|
|
|
|
|
if (result) {
|
|
|
|
|
for (File file1 : files) {
|
|
|
|
|
boolean delete = file1.delete();
|
|
|
|
|
if (!delete) {
|
|
|
|
|
Logger.info("删除失败,{}", file1.getAbsolutePath());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
File selectedFile = jFileChooser.getSelectedFile();
|
|
|
|
|
String legendName = selectedFile.getName();
|
|
|
|
|
if (!legendName.endsWith(".png")) {
|
|
|
|
|
legendName += ".png";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 图例文件名
|
|
|
|
|
filename = StrUtil.format("{}#{}.png", legendName, location);
|
|
|
|
|
file = new File(file.getParent(), filename);
|
|
|
|
|
File parentDir = selectedFile.getParentFile();
|
|
|
|
|
String finalLegendName = legendName;
|
|
|
|
|
|
|
|
|
|
Logger.info("保存路径" + file);
|
|
|
|
|
ImgUtil.cut(capture, file, new Rectangle(getCaptureX(), getCaptureY(), getCaptureWidth(), getCaptureHeight()));
|
|
|
|
|
// 提取公共的保存逻辑
|
|
|
|
|
Runnable saveAction = () -> {
|
|
|
|
|
File targetFile = new File(parentDir, finalLegendName);
|
|
|
|
|
doSave(targetFile);
|
|
|
|
|
close();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
preferences.put(LAST_PATH, file.getParent());
|
|
|
|
|
Logger.info("保存目录" + file.getParent());
|
|
|
|
|
Logger.info("保存地址" + file);
|
|
|
|
|
List<File> existingFiles = FileUtil.loopFiles(Legend.getDefaultBase(),
|
|
|
|
|
pathname -> pathname.getName().equals(finalLegendName));
|
|
|
|
|
|
|
|
|
|
if (existingFiles.isEmpty()) {
|
|
|
|
|
saveAction.run();
|
|
|
|
|
} else {
|
|
|
|
|
DialogUtil.confirm("提示", "存在相同图例,是否覆盖?", result -> {
|
|
|
|
|
if (result) {
|
|
|
|
|
saveAction.run();
|
|
|
|
|
} else {
|
|
|
|
|
close(); // 用户取消时也关闭窗口
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
close(); // 用户取消选择时关闭窗口
|
|
|
|
|
}
|
|
|
|
|
close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doSave(File targetFile) {
|
|
|
|
|
Logger.info("↓↓↓↓↓区域采集↓↓↓↓↓");
|
|
|
|
|
|
|
|
|
|
Logger.info("图例名称:{}", targetFile.getName().replaceAll("\\.png",""));
|
|
|
|
|
|
|
|
|
|
Logger.info("保存路径 {}", targetFile);
|
|
|
|
|
ImgUtil.cut(capture, targetFile, new Rectangle(
|
|
|
|
|
getCaptureX(),
|
|
|
|
|
getCaptureY(),
|
|
|
|
|
getCaptureWidth(),
|
|
|
|
|
getCaptureHeight()
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
preferences.put(LAST_PATH, targetFile.getParent());
|
|
|
|
|
Logger.info("保存目录 {}", targetFile.getParent());
|
|
|
|
|
Logger.info("保存地址 {}", targetFile);
|
|
|
|
|
Logger.info("用法示例:");
|
|
|
|
|
Logger.info("查找图例:findLegend(\"{}\", 0.9)",targetFile.getName().replaceAll("\\.png",""));
|
|
|
|
|
Logger.info("");
|
|
|
|
|
Logger.info("↑↑↑↑↑区域采集↑↑↑↑↑");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void close() {
|
|
|
|
|