diff --git a/src/main/java/com/luooqi/ocr/MainFm.java b/src/main/java/com/luooqi/ocr/MainFm.java index 9716fe9..c33609b 100644 --- a/src/main/java/com/luooqi/ocr/MainFm.java +++ b/src/main/java/com/luooqi/ocr/MainFm.java @@ -1,6 +1,5 @@ package com.luooqi.ocr; -import cn.hutool.core.swing.ScreenUtil; import cn.hutool.core.util.StrUtil; import com.luooqi.ocr.controller.ProcessController; import com.luooqi.ocr.model.CaptureInfo; @@ -153,7 +152,7 @@ public static void cancelSnap() { } public static void doOcr(BufferedImage image){ - processController.setX(CaptureInfo.ScreenBaseX + (CaptureInfo.screenWidth - 300)/2 ); + processController.setX(CaptureInfo.ScreenMinX + (CaptureInfo.ScreenWidth - 300)/2 ); processController.setY(250); processController.show(); Thread ocrThread = new Thread(()->{ diff --git a/src/main/java/com/luooqi/ocr/model/CaptureInfo.java b/src/main/java/com/luooqi/ocr/model/CaptureInfo.java index c399cf1..5a2bb22 100755 --- a/src/main/java/com/luooqi/ocr/model/CaptureInfo.java +++ b/src/main/java/com/luooqi/ocr/model/CaptureInfo.java @@ -1,6 +1,7 @@ package com.luooqi.ocr.model; +import cn.hutool.core.swing.ScreenUtil; import javafx.beans.binding.BooleanBinding; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; @@ -69,12 +70,13 @@ public class CaptureInfo { // ------------ /** The screen width. */ - public static int screenWidth = (int)Screen.getPrimary().getBounds().getWidth(); + public static int ScreenWidth = ScreenUtil.getWidth(); /** The screen height. */ - public static int screenHeight = (int)Screen.getPrimary().getBounds().getHeight(); + public static int ScreenHeight = ScreenUtil.getHeight(); - public static int ScreenBaseX = 0; + public static int ScreenMinX = 0; + public static int ScreenMaxX = 0; public void reset(){ mouseXNow = 0; diff --git a/src/main/java/com/luooqi/ocr/snap/ScreenCapture.java b/src/main/java/com/luooqi/ocr/snap/ScreenCapture.java index 95b6152..0d9e33d 100644 --- a/src/main/java/com/luooqi/ocr/snap/ScreenCapture.java +++ b/src/main/java/com/luooqi/ocr/snap/ScreenCapture.java @@ -133,6 +133,19 @@ public void handle(long nanos) { } } } + + if (data.mouseXPressed < 0){ + data.mouseXPressed = 0; + } + if (data.mouseXNow < 0){ + data.mouseXNow = 0; + } + if (data.mouseXPressed > CaptureInfo.ScreenWidth){ + data.mouseXPressed = CaptureInfo.ScreenWidth; + } + if (data.mouseXNow > CaptureInfo.ScreenWidth){ + data.mouseXNow = CaptureInfo.ScreenWidth; + } repaintCanvas(); } } @@ -151,18 +164,16 @@ public ScreenCapture(Stage mainStage) { rootPane.getChildren().add(mainCanvas); // Scene - scene = new Scene(rootPane, data.screenWidth, data.screenHeight, Color.TRANSPARENT); + scene = new Scene(rootPane, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, Color.TRANSPARENT); scene.setCursor(Cursor.NONE); addKeyHandlers(); // Canvas - mainCanvas.setWidth(data.screenWidth); - mainCanvas.setHeight(data.screenHeight); + mainCanvas.setWidth(CaptureInfo.ScreenWidth); + mainCanvas.setHeight(CaptureInfo.ScreenHeight); mainCanvas.setOnMousePressed(m -> { if (m.getButton() == MouseButton.PRIMARY) { - //data.mouseXPressed = (int) m.getScreenX(); - //data.mouseYPressed = (int) m.getScreenY(); data.mouseXPressed = (int) m.getX(); data.mouseYPressed = (int) m.getY(); } @@ -170,10 +181,20 @@ public ScreenCapture(Stage mainStage) { mainCanvas.setOnMouseDragged(m -> { if (m.getButton() == MouseButton.PRIMARY) { - //data.mouseXNow = (int) m.getScreenX(); - //data.mouseYNow = (int) m.getScreenY(); - data.mouseXNow = (int) m.getX(); - data.mouseYNow = (int) m.getY(); + if (m.getScreenX() >= CaptureInfo.ScreenMinX && + m.getScreenX() <= CaptureInfo.ScreenMaxX){ + data.mouseXNow = (int) m.getX(); + } + else if(m.getScreenX() > CaptureInfo.ScreenMaxX){ + data.mouseXNow = CaptureInfo.ScreenWidth; + } + + if (m.getScreenY() <= CaptureInfo.ScreenHeight){ + data.mouseYNow = (int) m.getY(); + } + else{ + data.mouseYNow = CaptureInfo.ScreenHeight; + } repaintCanvas(); } }); @@ -327,9 +348,9 @@ private void deActivateAllKeys() { * Repaint the canvas of the capture window. */ private void repaintCanvas() { - gc.clearRect(0, 0, data.screenWidth, data.screenHeight); + gc.clearRect(0, 0, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight); gc.setFill(CommUtils.MASK_COLOR); - gc.fillRect(0, 0, data.screenWidth, data.screenHeight); + gc.fillRect(0, 0, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight); gc.setFont(data.font); gc.setStroke(Color.RED); @@ -388,25 +409,25 @@ public void prepareForCapture() { StaticLog.error(e); } Rectangle rectangle = CommUtils.snapScreen(MainFm.stage); - data.ScreenBaseX = rectangle.x; + data.reset(); + CaptureInfo.ScreenMinX = rectangle.x; + CaptureInfo.ScreenMaxX = rectangle.x + rectangle.width; + CaptureInfo.ScreenWidth = rectangle.width; + CaptureInfo.ScreenHeight = rectangle.height; BufferedImage bufferedImage = ScreenUtil.captureScreen(rectangle); - bufferedImage = Scalr.resize(bufferedImage, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, data.screenWidth * 2, data.screenHeight * 2); + bufferedImage = Scalr.resize(bufferedImage, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, CaptureInfo.ScreenWidth * 2, CaptureInfo.ScreenHeight * 2); WritableImage fxImage = SwingFXUtils.toFXImage(bufferedImage, null); - data.reset(); - data.ScreenBaseX = rectangle.x; - data.screenWidth = rectangle.width; - data.screenHeight = rectangle.height; deActivateAllKeys(); scene.setRoot(new Pane()); - scene = new Scene(rootPane, data.screenWidth, data.screenHeight, Color.TRANSPARENT); + scene = new Scene(rootPane, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, Color.TRANSPARENT); addKeyHandlers(); - mainCanvas.setWidth(data.screenWidth); - mainCanvas.setHeight(data.screenHeight); + mainCanvas.setWidth(CaptureInfo.ScreenWidth); + mainCanvas.setHeight(CaptureInfo.ScreenHeight); mainCanvas.setCursor(Cursor.CROSSHAIR); initGraphContent(); rootPane.setBackground(new Background(new BackgroundImage(fxImage, BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, - BackgroundPosition.CENTER, new BackgroundSize(data.screenWidth, data.screenHeight, false, false, true, true)))); + BackgroundPosition.CENTER, new BackgroundSize(CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, false, false, true, true)))); repaintCanvas(); stage.setScene(scene); stage.setFullScreenExitHint(""); @@ -421,7 +442,7 @@ private void prepareImage() { BufferedImage image; try { mainCanvas.setDisable(true); - image = new Robot().createScreenCapture(new Rectangle(data.rectUpperLeftX + data.ScreenBaseX, data.rectUpperLeftY, data.rectWidth, data.rectHeight)); + image = new Robot().createScreenCapture(new Rectangle(data.rectUpperLeftX + CaptureInfo.ScreenMinX, data.rectUpperLeftY, data.rectWidth, data.rectHeight)); } catch (AWTException ex) { StaticLog.error(ex); return;