diff --git a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java
index 0717cc8..78f2152 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMainApplication.java
+++ b/src/main/java/com/example/jmacro/wjdr/JMainApplication.java
@@ -2,7 +2,6 @@ package com.example.jmacro.wjdr;
import com.example.jmacro.wjdr.base.ViewPoint;
import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.wjdr.MacroForWJDR;
import com.example.jmacro.wjdr.ui.FXMLUtil;
import com.example.jmacro.wjdr.util.Logger;
import com.example.jmacro.wjdr.util.ResourceUtil;
@@ -68,7 +67,18 @@ public class JMainApplication extends Application {
});
// 服务初始化
- JMainService.init(new MacroForWJDR(), new File("legend"));
+ JMainService.init(new JMacro() {
+ @Override
+ public ViewRect focus() {
+ return new ViewRect(0, 0, 500, 500);
+ }
+
+ @Override
+ public void run() {
+ findLegend(of(0,0,159,168), "电脑", 0.99);
+ findLegend(of(100,100,200,200), "电脑2", 0.99);
+ }
+ }, new File("legend"));
}
public static void main(String[] args) {
diff --git a/src/main/java/com/example/jmacro/wjdr/JMainController.java b/src/main/java/com/example/jmacro/wjdr/JMainController.java
index d3ce3b6..505b837 100644
--- a/src/main/java/com/example/jmacro/wjdr/JMainController.java
+++ b/src/main/java/com/example/jmacro/wjdr/JMainController.java
@@ -2,8 +2,9 @@ package com.example.jmacro.wjdr;
import com.example.jmacro.wjdr.base.Legend;
import com.example.jmacro.wjdr.base.ViewRect;
-import com.example.jmacro.wjdr.tool.Capture;
-import com.example.jmacro.wjdr.tool.Location;
+import com.example.jmacro.wjdr.tool.PickLegend;
+import com.example.jmacro.wjdr.tool.PickPoint;
+import com.example.jmacro.wjdr.tool.PickRect;
import com.example.jmacro.wjdr.util.DialogUtil;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
@@ -30,41 +31,58 @@ public class JMainController {
private ImageView preview;
/**
- * 截图
+ * 采点
*/
@FXML
- public void onCapture() {
+ public void pickPoint() {
ViewRect screen = JMainService.getInstance().getMacro().getFocusRect();
if (screen == null) {
DialogUtil.alert("未定位到视口,请稍后再试!");
return;
}
try {
- new Capture(screen.getLeft(), screen.getTop(), Legend.getDefaultBase());
+ new PickPoint(screen.getLeft(), screen.getTop());
} catch (AWTException awtException) {
awtException.printStackTrace();
}
}
/**
- * 截图
+ * 采区
*/
@FXML
- public void onLocation() {
+ public void pickRect() {
ViewRect screen = JMainService.getInstance().getMacro().getFocusRect();
if (screen == null) {
DialogUtil.alert("未定位到视口,请稍后再试!");
return;
}
try {
- new Location(screen.getLeft(), screen.getTop());
+ new PickRect(screen.getLeft(), screen.getTop());
} catch (AWTException awtException) {
awtException.printStackTrace();
}
}
/**
- * 截图
+ * 采图
+ */
+ @FXML
+ public void pickLegend() {
+ ViewRect screen = JMainService.getInstance().getMacro().getFocusRect();
+ if (screen == null) {
+ DialogUtil.alert("未定位到视口,请稍后再试!");
+ return;
+ }
+ try {
+ new PickLegend(screen.getLeft(), screen.getTop(), Legend.getDefaultBase());
+ } catch (AWTException awtException) {
+ awtException.printStackTrace();
+ }
+ }
+
+ /**
+ * 运行服务
*/
@FXML
public void onStart() {
@@ -74,7 +92,7 @@ public class JMainController {
}
/**
- * 截图
+ * 停止服务
*/
@FXML
public void onStop() {
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/Capture.java b/src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java
similarity index 96%
rename from src/main/java/com/example/jmacro/wjdr/tool/Capture.java
rename to src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java
index da499e1..4c62f69 100644
--- a/src/main/java/com/example/jmacro/wjdr/tool/Capture.java
+++ b/src/main/java/com/example/jmacro/wjdr/tool/PickLegend.java
@@ -30,7 +30,7 @@ import java.util.prefs.Preferences;
* @version 0.0.1
* @since 1.8
*/
-public class Capture extends JFrame {
+public class PickLegend extends JFrame {
private static final String LAST_PATH = "capture.last.path";
@@ -80,14 +80,14 @@ public class Capture extends JFrame {
* @param originY 原点y
* @throws AWTException
*/
- public Capture(int originX, int originY, File path) throws AWTException {
+ public PickLegend(int originX, int originY, File path) throws AWTException {
this();
this.originX = originX;
this.originY = originY;
this.preferences.put(LAST_PATH, path.isDirectory() ? path.getAbsolutePath() : path.getParent());
}
- public Capture() throws AWTException {
+ public PickLegend() throws AWTException {
init();
}
@@ -97,6 +97,7 @@ public class Capture extends JFrame {
setUndecorated(true);
setAlwaysOnTop(true);
setBackground(mask);
+ setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
// 初始化偏好设置
preferences = Preferences.userRoot().node(this.getClass().getName());
@@ -260,6 +261,6 @@ public class Capture extends JFrame {
*/
public static void main(String[] args) throws AWTException {
// 运行坐标图例截图工具
- new Capture(5, 5, new File("legend"));
+ new PickLegend(5, 5, new File("legend"));
}
}
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/Location.java b/src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java
similarity index 95%
rename from src/main/java/com/example/jmacro/wjdr/tool/Location.java
rename to src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java
index b71eaa2..854536c 100644
--- a/src/main/java/com/example/jmacro/wjdr/tool/Location.java
+++ b/src/main/java/com/example/jmacro/wjdr/tool/PickPoint.java
@@ -22,7 +22,7 @@ import java.awt.image.BufferedImage;
* @version 0.0.1
* @since 1.8
*/
-public class Location extends JFrame {
+public class PickPoint extends JFrame {
/**
* 参照原点x坐标
@@ -59,13 +59,13 @@ public class Location extends JFrame {
* @param originY 原点y
* @throws AWTException
*/
- public Location(int originX, int originY) throws AWTException {
+ public PickPoint(int originX, int originY) throws AWTException {
this();
this.originX = originX;
this.originY = originY;
}
- public Location() throws AWTException {
+ public PickPoint() throws AWTException {
init();
}
@@ -106,7 +106,7 @@ public class Location extends JFrame {
Logger.info("坐标色值:[#{}]", hexColor);
Logger.info("用法示例:");
- Logger.info("1、坐标点击:mouseLeftClick(of({},{}));", x - originX, y - originY);
+ Logger.info("1、点击坐标:mouseLeftClick(of({},{}));", x - originX, y - originY);
Logger.info("2、色值比对:matchColor(of({},{},{}));", x - originX, y - originY, hexColor);
Logger.info("=========================坐标采集=========================");
@@ -177,6 +177,6 @@ public class Location extends JFrame {
*/
public static void main(String[] args) throws AWTException {
// 运行坐标图例截图工具
- new Location(5, 5);
+ new PickPoint(5, 5);
}
}
diff --git a/src/main/java/com/example/jmacro/wjdr/tool/PickRect.java b/src/main/java/com/example/jmacro/wjdr/tool/PickRect.java
new file mode 100644
index 0000000..67885ae
--- /dev/null
+++ b/src/main/java/com/example/jmacro/wjdr/tool/PickRect.java
@@ -0,0 +1,215 @@
+package com.example.jmacro.wjdr.tool;
+
+import cn.hutool.log.StaticLog;
+import com.example.jmacro.wjdr.util.Logger;
+
+import javax.swing.*;
+import java.awt.*;
+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;
+
+/**
+ * 采集区域
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class PickRect extends JFrame {
+
+ /**
+ * 参照原点x坐标
+ */
+ private int originX;
+ /**
+ * 参照原点y坐标
+ */
+ private int originY;
+
+ /**
+ * 全屏幕截图
+ */
+ private BufferedImage capture;
+
+ /**
+ * 背景蒙层
+ */
+ private final Color mask = new Color(0, 0, 0, 0.2f);
+
+ /**
+ * 聚焦框线条
+ */
+ private final Stroke focusWindow = new BasicStroke(1.0f);
+
+ /**
+ * 屏幕截图区域起始坐标
+ */
+ private final Point start = new Point(0, 0);
+
+ /**
+ * 屏幕截图区域结束坐标
+ */
+ private final Point end = new Point(0, 0);
+
+
+ /**
+ * 有参照原点的构造器
+ *
+ * @param originX 原点x
+ * @param originY 原点y
+ * @throws AWTException
+ */
+ public PickRect(int originX, int originY) throws AWTException {
+ this();
+ this.originX = originX;
+ this.originY = originY;
+ }
+
+ public PickRect() throws AWTException {
+ init();
+ }
+
+ private void init() throws AWTException {
+ setExtendedState(Frame.MAXIMIZED_BOTH);
+ setLocation(0, 0);//位置
+ setUndecorated(true);
+ setAlwaysOnTop(true);
+ setBackground(mask);
+ setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
+
+ // 获取屏幕截图
+ Robot robot = new Robot();
+ Toolkit tk = Toolkit.getDefaultToolkit();
+ capture = robot.createScreenCapture(new Rectangle(0, 0, tk.getScreenSize().width, tk.getScreenSize().height));
+
+ // 监听窗口关闭
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ // 关闭应用时要释放资源
+ dispose();
+ System.exit(0);//0正常退出,1非正常退出
+ }
+ });
+
+ addMouseListener(new MouseAdapter() {
+ @Override
+ public void mousePressed(MouseEvent e) {
+ super.mousePressed(e);
+ start.setLocation(e.getX(), e.getY());
+ end.setLocation(e.getX(), e.getY());
+ Logger.info("起始坐标:{}", start);
+ repaint();
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ super.mouseReleased(e);
+ end.setLocation(e.getX(), e.getY());
+
+ int left = getCaptureX();
+ int top = getCaptureY();
+ int right = getCaptureX() + getCaptureWidth();
+ int bottom = getCaptureY() + getCaptureHeight();
+ Logger.info("=========================区域采集=========================");
+ Logger.info("屏幕区域:[{},{},{},{}]", left, top, right, bottom);
+ Logger.info("相对区域:[{},{},{},{}]", left - originX, top - originY, right - originX, bottom - originY);
+
+ Logger.info("用法示例:");
+ Logger.info("1、区域点击:mouseLeftClick(of({},{},{},{}));", left - originX, top - originY, right - originX, bottom - originY);
+ Logger.info("2、区域查找:findLegend(of({},{},{},{}), \"按钮\", 0.99);", left - originX, top - originY, right - originX, bottom - originY);
+
+ Logger.info("=========================区域采集=========================");
+ close();
+ }
+ });
+
+ addMouseMotionListener(new MouseMotionAdapter() {
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ super.mouseDragged(e);
+ end.setLocation(e.getX(), e.getY());
+ repaint();
+ }
+ });
+
+ addKeyListener(new KeyAdapter() {
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ switch (e.getKeyCode()) {
+ case KeyEvent.VK_ESCAPE: {
+ StaticLog.info("exit.");
+ close();
+ }
+ break;
+ }
+
+ }
+ });
+
+ setVisible(true);
+ }
+
+ @Override
+ public void doLayout() {
+ super.doLayout();
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ Graphics2D g2d = (Graphics2D) g;
+ g2d.drawImage(capture, 0, 0, capture.getWidth(), capture.getHeight(), this);
+
+ // 在背景图上加个蒙层
+ g2d.setColor(mask);
+ g2d.fillRect(0, 0, capture.getWidth(), capture.getHeight());
+
+ int w = getCaptureWidth();
+ int h = getCaptureHeight();
+ if (w > 0 && h > 0) {
+ g2d.setStroke(focusWindow);
+ g2d.setColor(Color.green);
+ g2d.drawRect(getCaptureX(), getCaptureY(), w, h);
+ }
+ }
+
+ public int getCaptureX() {
+ return (int) Math.min(start.getX(), end.getX());
+ }
+
+ public int getCaptureY() {
+ return (int) Math.min(start.getY(), end.getY());
+ }
+
+ public int getCaptureWidth() {
+ return (int) Math.abs(start.getX() - end.getX());
+ }
+
+ public int getCaptureHeight() {
+ return (int) Math.abs(start.getY() - end.getY());
+ }
+
+ public void close() {
+ setVisible(false);
+ dispose();
+ }
+
+ /**
+ * 工具入口
+ *
+ * @param args
+ * @throws AWTException
+ */
+ public static void main(String[] args) throws AWTException {
+ // 运行坐标图例截图工具
+ new PickRect(5, 5);
+ }
+}
diff --git a/src/main/resources/main.fxml b/src/main/resources/main.fxml
index 2d5d3af..686bdf7 100644
--- a/src/main/resources/main.fxml
+++ b/src/main/resources/main.fxml
@@ -17,8 +17,8 @@
-
-
-