Skip to content

Commit

Permalink
fixed screen snapshot select area bug
Browse files Browse the repository at this point in the history
  • Loading branch information
AnyListen committed Apr 16, 2019
1 parent 9fc6312 commit 09b52ad
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 27 deletions.
3 changes: 1 addition & 2 deletions 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;
Expand Down Expand Up @@ -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(()->{
Expand Down
8 changes: 5 additions & 3 deletions 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;
Expand Down Expand Up @@ -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;
Expand Down
65 changes: 43 additions & 22 deletions src/main/java/com/luooqi/ocr/snap/ScreenCapture.java
Expand Up @@ -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();
}
}
Expand All @@ -151,29 +164,37 @@ 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();
}
});

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();
}
});
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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("");
Expand All @@ -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;
Expand Down

0 comments on commit 09b52ad

Please sign in to comment.