-
-
Notifications
You must be signed in to change notification settings - Fork 150
/
Copy pathlibnut-screen.class.ts
115 lines (105 loc) · 3 KB
/
libnut-screen.class.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import libnut = require("@nut-tree/libnut");
import {Image} from "../../image.class";
import {Region} from "../../region.class";
import {ScreenProviderInterface} from "../screen-provider.interface";
import {ColorMode} from "../../colormode.enum";
export default class ScreenAction implements ScreenProviderInterface {
private static determinePixelDensity(
screen: Region,
screenShot: libnut.Bitmap,
): { scaleX: number; scaleY: number } {
return {
scaleX: screenShot.width / screen.width,
scaleY: screenShot.height / screen.height,
};
}
constructor() {
}
public grabScreen(): Promise<Image> {
return new Promise((resolve, reject) => {
const screenShot = libnut.screen.capture();
if (screenShot) {
const screenSize = libnut.getScreenSize();
const pixelScaling = ScreenAction.determinePixelDensity(
new Region(0, 0, screenSize.width, screenSize.height),
screenShot,
);
resolve(
new Image(
screenShot.width,
screenShot.height,
screenShot.image,
4,
"grabScreenResult",
ColorMode.BGR,
pixelScaling,
),
);
} else {
reject("Unable to fetch screen content.");
}
});
}
public grabScreenRegion(region: Region): Promise<Image> {
return new Promise((resolve, reject) => {
const screenShot = libnut.screen.capture(
region.left,
region.top,
region.width,
region.height,
);
if (screenShot) {
const pixelScaling = ScreenAction.determinePixelDensity(region, screenShot);
resolve(
new Image(
screenShot.width,
screenShot.height,
screenShot.image,
4,
"grabScreenRegionResult",
ColorMode.BGR,
pixelScaling,
),
);
} else {
reject("Unable to fetch screen content.");
}
});
}
public highlightScreenRegion(region: Region, duration: number, opacity: number): Promise<void> {
return new Promise<void>((resolve) => {
libnut.screen.highlight(region.left, region.top, region.width, region.height, duration, opacity);
resolve();
});
}
public screenWidth(): Promise<number> {
return new Promise<number>((resolve, reject) => {
try {
const size = libnut.getScreenSize();
resolve(size.width);
} catch (e) {
reject(e);
}
});
}
public screenHeight(): Promise<number> {
return new Promise<number>((resolve, reject) => {
try {
const size = libnut.getScreenSize();
resolve(size.height);
} catch (e) {
reject(e);
}
});
}
public screenSize(): Promise<Region> {
return new Promise<Region>((resolve, reject) => {
try {
const screenSize = libnut.getScreenSize();
resolve(new Region(0, 0, screenSize.width, screenSize.height));
} catch (e) {
reject(e);
}
});
}
}