Skip to content

Commit 09b52ad

Browse files
committed
fixed screen snapshot select area bug
1 parent 9fc6312 commit 09b52ad

File tree

3 files changed

+49
-27
lines changed

3 files changed

+49
-27
lines changed

src/main/java/com/luooqi/ocr/MainFm.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.luooqi.ocr;
22

3-
import cn.hutool.core.swing.ScreenUtil;
43
import cn.hutool.core.util.StrUtil;
54
import com.luooqi.ocr.controller.ProcessController;
65
import com.luooqi.ocr.model.CaptureInfo;
@@ -153,7 +152,7 @@ public static void cancelSnap() {
153152
}
154153

155154
public static void doOcr(BufferedImage image){
156-
processController.setX(CaptureInfo.ScreenBaseX + (CaptureInfo.screenWidth - 300)/2 );
155+
processController.setX(CaptureInfo.ScreenMinX + (CaptureInfo.ScreenWidth - 300)/2 );
157156
processController.setY(250);
158157
processController.show();
159158
Thread ocrThread = new Thread(()->{

src/main/java/com/luooqi/ocr/model/CaptureInfo.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
package com.luooqi.ocr.model;
33

4+
import cn.hutool.core.swing.ScreenUtil;
45
import javafx.beans.binding.BooleanBinding;
56
import javafx.beans.property.BooleanProperty;
67
import javafx.beans.property.SimpleBooleanProperty;
@@ -69,12 +70,13 @@ public class CaptureInfo {
6970
// ------------
7071

7172
/** The screen width. */
72-
public static int screenWidth = (int)Screen.getPrimary().getBounds().getWidth();
73+
public static int ScreenWidth = ScreenUtil.getWidth();
7374

7475
/** The screen height. */
75-
public static int screenHeight = (int)Screen.getPrimary().getBounds().getHeight();
76+
public static int ScreenHeight = ScreenUtil.getHeight();
7677

77-
public static int ScreenBaseX = 0;
78+
public static int ScreenMinX = 0;
79+
public static int ScreenMaxX = 0;
7880

7981
public void reset(){
8082
mouseXNow = 0;

src/main/java/com/luooqi/ocr/snap/ScreenCapture.java

+43-22
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,19 @@ public void handle(long nanos) {
133133
}
134134
}
135135
}
136+
137+
if (data.mouseXPressed < 0){
138+
data.mouseXPressed = 0;
139+
}
140+
if (data.mouseXNow < 0){
141+
data.mouseXNow = 0;
142+
}
143+
if (data.mouseXPressed > CaptureInfo.ScreenWidth){
144+
data.mouseXPressed = CaptureInfo.ScreenWidth;
145+
}
146+
if (data.mouseXNow > CaptureInfo.ScreenWidth){
147+
data.mouseXNow = CaptureInfo.ScreenWidth;
148+
}
136149
repaintCanvas();
137150
}
138151
}
@@ -151,29 +164,37 @@ public ScreenCapture(Stage mainStage) {
151164
rootPane.getChildren().add(mainCanvas);
152165

153166
// Scene
154-
scene = new Scene(rootPane, data.screenWidth, data.screenHeight, Color.TRANSPARENT);
167+
scene = new Scene(rootPane, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, Color.TRANSPARENT);
155168
scene.setCursor(Cursor.NONE);
156169

157170
addKeyHandlers();
158171

159172
// Canvas
160-
mainCanvas.setWidth(data.screenWidth);
161-
mainCanvas.setHeight(data.screenHeight);
173+
mainCanvas.setWidth(CaptureInfo.ScreenWidth);
174+
mainCanvas.setHeight(CaptureInfo.ScreenHeight);
162175
mainCanvas.setOnMousePressed(m -> {
163176
if (m.getButton() == MouseButton.PRIMARY) {
164-
//data.mouseXPressed = (int) m.getScreenX();
165-
//data.mouseYPressed = (int) m.getScreenY();
166177
data.mouseXPressed = (int) m.getX();
167178
data.mouseYPressed = (int) m.getY();
168179
}
169180
});
170181

171182
mainCanvas.setOnMouseDragged(m -> {
172183
if (m.getButton() == MouseButton.PRIMARY) {
173-
//data.mouseXNow = (int) m.getScreenX();
174-
//data.mouseYNow = (int) m.getScreenY();
175-
data.mouseXNow = (int) m.getX();
176-
data.mouseYNow = (int) m.getY();
184+
if (m.getScreenX() >= CaptureInfo.ScreenMinX &&
185+
m.getScreenX() <= CaptureInfo.ScreenMaxX){
186+
data.mouseXNow = (int) m.getX();
187+
}
188+
else if(m.getScreenX() > CaptureInfo.ScreenMaxX){
189+
data.mouseXNow = CaptureInfo.ScreenWidth;
190+
}
191+
192+
if (m.getScreenY() <= CaptureInfo.ScreenHeight){
193+
data.mouseYNow = (int) m.getY();
194+
}
195+
else{
196+
data.mouseYNow = CaptureInfo.ScreenHeight;
197+
}
177198
repaintCanvas();
178199
}
179200
});
@@ -327,9 +348,9 @@ private void deActivateAllKeys() {
327348
* Repaint the canvas of the capture window.
328349
*/
329350
private void repaintCanvas() {
330-
gc.clearRect(0, 0, data.screenWidth, data.screenHeight);
351+
gc.clearRect(0, 0, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight);
331352
gc.setFill(CommUtils.MASK_COLOR);
332-
gc.fillRect(0, 0, data.screenWidth, data.screenHeight);
353+
gc.fillRect(0, 0, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight);
333354

334355
gc.setFont(data.font);
335356
gc.setStroke(Color.RED);
@@ -388,25 +409,25 @@ public void prepareForCapture() {
388409
StaticLog.error(e);
389410
}
390411
Rectangle rectangle = CommUtils.snapScreen(MainFm.stage);
391-
data.ScreenBaseX = rectangle.x;
412+
data.reset();
413+
CaptureInfo.ScreenMinX = rectangle.x;
414+
CaptureInfo.ScreenMaxX = rectangle.x + rectangle.width;
415+
CaptureInfo.ScreenWidth = rectangle.width;
416+
CaptureInfo.ScreenHeight = rectangle.height;
392417
BufferedImage bufferedImage = ScreenUtil.captureScreen(rectangle);
393-
bufferedImage = Scalr.resize(bufferedImage, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, data.screenWidth * 2, data.screenHeight * 2);
418+
bufferedImage = Scalr.resize(bufferedImage, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, CaptureInfo.ScreenWidth * 2, CaptureInfo.ScreenHeight * 2);
394419
WritableImage fxImage = SwingFXUtils.toFXImage(bufferedImage, null);
395-
data.reset();
396-
data.ScreenBaseX = rectangle.x;
397-
data.screenWidth = rectangle.width;
398-
data.screenHeight = rectangle.height;
399420
deActivateAllKeys();
400421
scene.setRoot(new Pane());
401-
scene = new Scene(rootPane, data.screenWidth, data.screenHeight, Color.TRANSPARENT);
422+
scene = new Scene(rootPane, CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, Color.TRANSPARENT);
402423
addKeyHandlers();
403-
mainCanvas.setWidth(data.screenWidth);
404-
mainCanvas.setHeight(data.screenHeight);
424+
mainCanvas.setWidth(CaptureInfo.ScreenWidth);
425+
mainCanvas.setHeight(CaptureInfo.ScreenHeight);
405426
mainCanvas.setCursor(Cursor.CROSSHAIR);
406427
initGraphContent();
407428
rootPane.setBackground(new Background(new BackgroundImage(fxImage,
408429
BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
409-
BackgroundPosition.CENTER, new BackgroundSize(data.screenWidth, data.screenHeight, false, false, true, true))));
430+
BackgroundPosition.CENTER, new BackgroundSize(CaptureInfo.ScreenWidth, CaptureInfo.ScreenHeight, false, false, true, true))));
410431
repaintCanvas();
411432
stage.setScene(scene);
412433
stage.setFullScreenExitHint("");
@@ -421,7 +442,7 @@ private void prepareImage() {
421442
BufferedImage image;
422443
try {
423444
mainCanvas.setDisable(true);
424-
image = new Robot().createScreenCapture(new Rectangle(data.rectUpperLeftX + data.ScreenBaseX, data.rectUpperLeftY, data.rectWidth, data.rectHeight));
445+
image = new Robot().createScreenCapture(new Rectangle(data.rectUpperLeftX + CaptureInfo.ScreenMinX, data.rectUpperLeftY, data.rectWidth, data.rectHeight));
425446
} catch (AWTException ex) {
426447
StaticLog.error(ex);
427448
return;

0 commit comments

Comments
 (0)