ms-vite-plugin 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.js +6 -0
- package/dist/cli.js +91 -1
- package/dist/mcp/device-config.d.ts +55 -0
- package/dist/mcp/device-config.js +183 -0
- package/dist/mcp/docs-service.d.ts +65 -0
- package/dist/mcp/docs-service.js +168 -0
- package/dist/mcp/project.d.ts +16 -0
- package/dist/mcp/project.js +74 -0
- package/dist/mcp/tools.d.ts +18 -0
- package/dist/mcp/tools.js +825 -0
- package/dist/mcp/types.d.ts +32 -0
- package/dist/mcp/types.js +11 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +86 -0
- package/dist/project.d.ts +89 -0
- package/dist/project.js +306 -0
- package/dist/version.d.ts +12 -0
- package/dist/version.js +63 -0
- package/docs/api/action.md +922 -0
- package/docs/api/appleocr.md +229 -0
- package/docs/api/config.md +122 -0
- package/docs/api/cryptoUtils.md +232 -0
- package/docs/api/device.md +374 -0
- package/docs/api/file.md +516 -0
- package/docs/api/global.md +617 -0
- package/docs/api/hid.md +1032 -0
- package/docs/api/hotUpdate.md +166 -0
- package/docs/api/http.md +548 -0
- package/docs/api/image.md +907 -0
- package/docs/api/ime.md +290 -0
- package/docs/api/logger.md +324 -0
- package/docs/api/media.md +248 -0
- package/docs/api/mysql.md +441 -0
- package/docs/api/netCard.md +200 -0
- package/docs/api/node.md +353 -0
- package/docs/api/paddleocr.md +246 -0
- package/docs/api/pip.md +242 -0
- package/docs/api/system.md +572 -0
- package/docs/api/thread.md +269 -0
- package/docs/api/tomatoocr.md +425 -0
- package/docs/api/tts.md +334 -0
- package/docs/api/ui.md +947 -0
- package/docs/api/utils.md +265 -0
- package/docs/api/yolo.md +310 -0
- package/docs/apicn/action.md +919 -0
- package/docs/apicn/appleocr.md +233 -0
- package/docs/apicn/config.md +120 -0
- package/docs/apicn/device.md +385 -0
- package/docs/apicn/file.md +511 -0
- package/docs/apicn/global.md +613 -0
- package/docs/apicn/hid.md +1033 -0
- package/docs/apicn/hotUpdate.md +170 -0
- package/docs/apicn/http.md +672 -0
- package/docs/apicn/image.md +924 -0
- package/docs/apicn/ime.md +290 -0
- package/docs/apicn/logger.md +332 -0
- package/docs/apicn/media.md +252 -0
- package/docs/apicn/mysql.md +445 -0
- package/docs/apicn/netCard.md +200 -0
- package/docs/apicn/node.md +362 -0
- package/docs/apicn/paddleocr.md +255 -0
- package/docs/apicn/pip.md +242 -0
- package/docs/apicn/system.md +575 -0
- package/docs/apicn/thread.md +269 -0
- package/docs/apicn/tts.md +338 -0
- package/docs/apicn/ui.md +933 -0
- package/docs/apicn/utils.md +265 -0
- package/docs/apicn/yolo.md +314 -0
- package/docs/apipython/action.md +901 -0
- package/docs/apipython/appleocr.md +226 -0
- package/docs/apipython/config.md +126 -0
- package/docs/apipython/cryptoUtils.md +246 -0
- package/docs/apipython/device.md +365 -0
- package/docs/apipython/file.md +476 -0
- package/docs/apipython/g.md +154 -0
- package/docs/apipython/hid.md +1059 -0
- package/docs/apipython/hotUpdate.md +154 -0
- package/docs/apipython/image.md +938 -0
- package/docs/apipython/ime.md +306 -0
- package/docs/apipython/logger.md +330 -0
- package/docs/apipython/media.md +221 -0
- package/docs/apipython/mysql.md +432 -0
- package/docs/apipython/netCard.md +219 -0
- package/docs/apipython/node.md +331 -0
- package/docs/apipython/overview.md +66 -0
- package/docs/apipython/paddleocr.md +211 -0
- package/docs/apipython/pip.md +231 -0
- package/docs/apipython/system.md +458 -0
- package/docs/apipython/tomatoocr.md +444 -0
- package/docs/apipython/tts.md +331 -0
- package/docs/apipython/ui.md +949 -0
- package/docs/apipython/utils.md +284 -0
- package/docs/apipython/yolo.md +281 -0
- package/package.json +8 -4
|
@@ -0,0 +1,907 @@
|
|
|
1
|
+
# 图片模块 (Image)
|
|
2
|
+
|
|
3
|
+
图片模块提供了强大的图像处理功能,包括截图、图像识别、模板匹配、颜色查找、图像变换等。
|
|
4
|
+
|
|
5
|
+
注意所有的 `imageId` 都需要在使用后释放,否则会导致内存泄漏。
|
|
6
|
+
|
|
7
|
+
所有传递`imageId`的函数都可以使用`"screen"`作为参数,来表示对当前屏幕进行操作。
|
|
8
|
+
|
|
9
|
+
`"screen"` 在设置为`Agent`模式,使用`快点Agent`截图,录屏模式使用录屏截图。
|
|
10
|
+
|
|
11
|
+
所有传递`imageId`的函数都可以使用`"shortcut"`作为参数,来表示指定 HID 快捷指令截图
|
|
12
|
+
|
|
13
|
+
所有传递`imageId`的函数都可以使用`"actionScreenshot"`作为参数,来表示指定 HID 快捷键系统截图
|
|
14
|
+
|
|
15
|
+
所有传递`imageId`的函数都可以使用图片路径作为参数,来表示对指定图片进行操作,支持 res 目录文件,和手机文件路径。
|
|
16
|
+
|
|
17
|
+
## 图片获取与管理
|
|
18
|
+
|
|
19
|
+
### captureScreen - 截取屏幕。
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
function captureScreen(
|
|
23
|
+
x?: number,
|
|
24
|
+
y?: number,
|
|
25
|
+
ex?: number,
|
|
26
|
+
ey?: number,
|
|
27
|
+
): string | null;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**参数:**
|
|
31
|
+
|
|
32
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
33
|
+
| ------ | ------ | -------- | ------ | ----------------- |
|
|
34
|
+
| `x` | number | 否 | 0 | 区域左上角 X 坐标 |
|
|
35
|
+
| `y` | number | 否 | 0 | 区域左上角 Y 坐标 |
|
|
36
|
+
| `ex` | number | 否 | 0 | 区域右下角 X 坐标 |
|
|
37
|
+
| `ey` | number | 否 | 0 | 区域右下角 Y 坐标 |
|
|
38
|
+
|
|
39
|
+
**返回值:**
|
|
40
|
+
|
|
41
|
+
| 类型 | 描述 |
|
|
42
|
+
| -------- | -------------------------------- |
|
|
43
|
+
| `string` | 截图的图片 ID,失败时返回 `null` |
|
|
44
|
+
|
|
45
|
+
**示例:**
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// 截取全屏
|
|
49
|
+
const imageId = image.captureScreen();
|
|
50
|
+
// 获取手机文档目录
|
|
51
|
+
const dir = file.getInternalDir("documents");
|
|
52
|
+
if (imageId) {
|
|
53
|
+
logi("截图成功");
|
|
54
|
+
image.saveTo(imageId, `${dir}/screenshot.jpg`);
|
|
55
|
+
image.release(imageId); // 记得释放内存
|
|
56
|
+
} else {
|
|
57
|
+
logi("截图失败");
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// 截取指定区域
|
|
61
|
+
const imageId = image.captureScreen(100, 100, 200, 200);
|
|
62
|
+
// 获取手机文档目录
|
|
63
|
+
const dir = file.getInternalDir("documents");
|
|
64
|
+
if (imageId) {
|
|
65
|
+
logi("截图成功");
|
|
66
|
+
image.saveTo(imageId, `${dir}/screenshot.jpg`);
|
|
67
|
+
image.release(imageId); // 记得释放内存
|
|
68
|
+
} else {
|
|
69
|
+
logi("截图失败");
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### captureFullScreen - 截取设备全屏。
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
function captureFullScreen(): string | null;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**返回值:**
|
|
80
|
+
|
|
81
|
+
| 类型 | 描述 |
|
|
82
|
+
| -------- | -------------------------------- |
|
|
83
|
+
| `string` | 截图的图片 ID,失败时返回 `null` |
|
|
84
|
+
|
|
85
|
+
**示例:**
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
const imageId = image.captureFullScreen();
|
|
89
|
+
// 获取手机文档目录
|
|
90
|
+
const dir = file.getInternalDir("documents");
|
|
91
|
+
if (imageId) {
|
|
92
|
+
logi("截图成功");
|
|
93
|
+
image.saveTo(imageId, `${dir}/screenshot.jpg`);
|
|
94
|
+
image.release(imageId); // 记得释放内存
|
|
95
|
+
} else {
|
|
96
|
+
logi("截图失败");
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### captureRect - 截取设备指定区域。
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
function captureRect(
|
|
104
|
+
x: number,
|
|
105
|
+
y: number,
|
|
106
|
+
ex: number,
|
|
107
|
+
ey: number,
|
|
108
|
+
): string | null;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**参数:**
|
|
112
|
+
|
|
113
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
114
|
+
| ------ | ------ | -------- | ------ | ----------------- |
|
|
115
|
+
| `x` | number | 是 | - | 区域左上角 X 坐标 |
|
|
116
|
+
| `y` | number | 是 | - | 区域左上角 Y 坐标 |
|
|
117
|
+
| `ex` | number | 是 | - | 区域右下角 X 坐标 |
|
|
118
|
+
| `ey` | number | 是 | - | 区域右下角 Y 坐标 |
|
|
119
|
+
|
|
120
|
+
**返回值:**
|
|
121
|
+
|
|
122
|
+
| 类型 | 描述 |
|
|
123
|
+
| -------- | -------------------------------- |
|
|
124
|
+
| `string` | 截图的图片 ID,失败时返回 `null` |
|
|
125
|
+
|
|
126
|
+
**示例:**
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
const imageId = image.captureRect(100, 100, 200, 200);
|
|
130
|
+
// 获取手机文档目录
|
|
131
|
+
const dir = file.getInternalDir("documents");
|
|
132
|
+
if (imageId) {
|
|
133
|
+
logi("截图成功");
|
|
134
|
+
image.saveTo(imageId, `${dir}/screenshot.jpg`);
|
|
135
|
+
image.release(imageId); // 记得释放内存
|
|
136
|
+
} else {
|
|
137
|
+
logi("截图失败");
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### readImage - 从文件路径或imageId读取图片。
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
function readImage(path: string): string | null;
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**参数:**
|
|
148
|
+
|
|
149
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
150
|
+
| ------ | ------ | -------- | ------ | ----------------------------------------------------------------------- |
|
|
151
|
+
| `path` | string | 是 | - | 图片文件路径 支持 res 目录文件和手机文件绝对路径,支持特殊标识的imageId |
|
|
152
|
+
|
|
153
|
+
**返回值:**
|
|
154
|
+
|
|
155
|
+
| 类型 | 描述 |
|
|
156
|
+
| -------- | -------------------------- |
|
|
157
|
+
| `string` | 图片 ID,失败时返回 `null` |
|
|
158
|
+
|
|
159
|
+
**示例:**
|
|
160
|
+
|
|
161
|
+
```javascript
|
|
162
|
+
const imageId = image.readImage("template.jpg");
|
|
163
|
+
if (imageId) {
|
|
164
|
+
logi("图片读取成功");
|
|
165
|
+
// 使用图片...
|
|
166
|
+
image.release(imageId);
|
|
167
|
+
} else {
|
|
168
|
+
logi("图片读取失败");
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### saveTo - 保存图片到指定路径。
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
function saveTo(imageId: string, filePath: string): boolean;
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**参数:**
|
|
179
|
+
|
|
180
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
181
|
+
| ---------- | ------ | -------- | ------ | -------- |
|
|
182
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
183
|
+
| `filePath` | string | 是 | - | 保存路径 |
|
|
184
|
+
|
|
185
|
+
**返回值:**
|
|
186
|
+
|
|
187
|
+
| 类型 | 描述 |
|
|
188
|
+
| --------- | ------------------------------------- |
|
|
189
|
+
| `boolean` | `true` 表示保存成功,`false` 表示失败 |
|
|
190
|
+
|
|
191
|
+
**示例:**
|
|
192
|
+
|
|
193
|
+
```javascript
|
|
194
|
+
const imageId = image.captureFullScreen();
|
|
195
|
+
// 获取手机文档目录
|
|
196
|
+
const dir = file.getInternalDir("documents");
|
|
197
|
+
if (imageId) {
|
|
198
|
+
image.saveTo(imageId, `${dir}/screenshot.jpg`);
|
|
199
|
+
image.release(imageId);
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 内存管理
|
|
204
|
+
|
|
205
|
+
### release - 释放单个图片的内存。
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
function release(imageId: string): void;
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**参数:**
|
|
212
|
+
|
|
213
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
214
|
+
| --------- | ------ | -------- | ------ | --------------- |
|
|
215
|
+
| `imageId` | string | 是 | - | 要释放的图片 ID |
|
|
216
|
+
|
|
217
|
+
### releaseAll - 释放所有图片的内存。
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
function releaseAll(): void;
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### isRelease - 检查图片是否已被释放。
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
function isRelease(imageId: string): boolean;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**参数:**
|
|
230
|
+
|
|
231
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
232
|
+
| --------- | ------ | -------- | ------ | ------- |
|
|
233
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
234
|
+
|
|
235
|
+
**返回值:**
|
|
236
|
+
|
|
237
|
+
| 类型 | 描述 |
|
|
238
|
+
| --------- | ------------------------------------- |
|
|
239
|
+
| `boolean` | `true` 表示已释放,`false` 表示未释放 |
|
|
240
|
+
|
|
241
|
+
**示例:**
|
|
242
|
+
|
|
243
|
+
```javascript
|
|
244
|
+
const imageId = image.captureFullScreen();
|
|
245
|
+
if (imageId) {
|
|
246
|
+
logi(`释放前: ${image.isRelease(imageId)}`); // false
|
|
247
|
+
image.release(imageId);
|
|
248
|
+
logi(`释放后: ${image.isRelease(imageId)}`); // true
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## 图片信息
|
|
253
|
+
|
|
254
|
+
### getSize - 获取图片尺寸。
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
function getSize(imageId: string): { width: number; height: number } | null;
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**参数:**
|
|
261
|
+
|
|
262
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
263
|
+
| --------- | ------ | -------- | ------ | ------- |
|
|
264
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
265
|
+
|
|
266
|
+
**返回值:**
|
|
267
|
+
|
|
268
|
+
| 类型 | 描述 |
|
|
269
|
+
| ---------------- | -------------------------------------------------------------- |
|
|
270
|
+
| `object \| null` | 图片尺寸对象,包含 `width` 和 `height` 属性,失败时返回 `null` |
|
|
271
|
+
|
|
272
|
+
**示例:**
|
|
273
|
+
|
|
274
|
+
```javascript
|
|
275
|
+
const imageId = image.captureFullScreen();
|
|
276
|
+
if (imageId) {
|
|
277
|
+
const size = image.getSize(imageId);
|
|
278
|
+
if (size) {
|
|
279
|
+
logi(`图片尺寸: ${size.width} x ${size.height}`);
|
|
280
|
+
}
|
|
281
|
+
image.release(imageId);
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### pixel - 获取图片指定坐标的像素颜色值。
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
function pixel(imageId: string, x: number, y: number): number;
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**参数:**
|
|
292
|
+
|
|
293
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
294
|
+
| --------- | ------ | -------- | ------ | ------- |
|
|
295
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
296
|
+
| `x` | number | 是 | - | X 坐标 |
|
|
297
|
+
| `y` | number | 是 | - | Y 坐标 |
|
|
298
|
+
|
|
299
|
+
**返回值:**
|
|
300
|
+
|
|
301
|
+
| 类型 | 描述 |
|
|
302
|
+
| -------- | -------------- |
|
|
303
|
+
| `number` | 颜色值(整型) |
|
|
304
|
+
|
|
305
|
+
**示例:**
|
|
306
|
+
|
|
307
|
+
```javascript
|
|
308
|
+
const imageId = image.captureFullScreen();
|
|
309
|
+
if (imageId) {
|
|
310
|
+
const color = image.pixel(imageId, 100, 100);
|
|
311
|
+
const colorHex = image.argb(color);
|
|
312
|
+
logi(`坐标 (100, 100) 的颜色: ${colorHex}`);
|
|
313
|
+
image.release(imageId);
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### argb - 将整型颜色值转换为 16 进制 RGB 字符串。
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
function argb(color: number): string;
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**参数:**
|
|
324
|
+
|
|
325
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
326
|
+
| ------- | ------ | -------- | ------ | ---------- |
|
|
327
|
+
| `color` | number | 是 | - | 整型颜色值 |
|
|
328
|
+
|
|
329
|
+
**返回值:**
|
|
330
|
+
|
|
331
|
+
| 类型 | 描述 |
|
|
332
|
+
| -------- | ------------------ |
|
|
333
|
+
| `string` | 16 进制 RGB 字符串 |
|
|
334
|
+
|
|
335
|
+
## 颜色识别
|
|
336
|
+
|
|
337
|
+
### findColor - 单点找色
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
function findColor(
|
|
341
|
+
imageId: string,
|
|
342
|
+
color: string,
|
|
343
|
+
threshold: number,
|
|
344
|
+
x: number,
|
|
345
|
+
y: number,
|
|
346
|
+
ex: number,
|
|
347
|
+
ey: number,
|
|
348
|
+
limit: number,
|
|
349
|
+
orz: number,
|
|
350
|
+
): { x: number; y: number }[];
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**参数:**
|
|
354
|
+
|
|
355
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
356
|
+
| ----------- | ------ | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
357
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
358
|
+
| `color` | string | 是 | - | 颜色值,支持 "主色-偏色" 格式,如 "#6DD1E6-#101010" |
|
|
359
|
+
| `threshold` | number | 是 | - | 颜色匹配阈值 (0.0-1.0) |
|
|
360
|
+
| `x, y` | number | 是 | - | 搜索区域左上角坐标 |
|
|
361
|
+
| `ex, ey` | number | 是 | - | 搜索区域右下角坐标 |
|
|
362
|
+
| `limit` | number | 是 | - | 最大查找数量 |
|
|
363
|
+
| `orz` | number | 是 | - | 查找方向(1-8) 1 左上角到右下角,纵向开始 2 左上角到右下角,横向开始 3 右上角到左下角,横向开始 4 右上角到左下角,纵向开始 5 右下角到左上角,纵向开始 6 右下角到左上角,横向开始 7 左下角到右上角,横向开始 8 左下角到右上角,纵向开始 |
|
|
364
|
+
|
|
365
|
+
**返回值:**
|
|
366
|
+
|
|
367
|
+
| 类型 | 描述 |
|
|
368
|
+
| ------- | ---------------------------------------------- |
|
|
369
|
+
| `array` | 找到的颜色点数组,每个元素包含 `x` 和 `y` 属性 |
|
|
370
|
+
|
|
371
|
+
**示例:**
|
|
372
|
+
|
|
373
|
+
```javascript
|
|
374
|
+
const imageId = image.captureFullScreen();
|
|
375
|
+
if (imageId) {
|
|
376
|
+
// 查找蓝色按钮
|
|
377
|
+
const points = image.findColor(
|
|
378
|
+
imageId,
|
|
379
|
+
"#1E90FF-#101010", // 蓝色,允许一定偏差
|
|
380
|
+
0.9, // 阈值
|
|
381
|
+
0,
|
|
382
|
+
0, // 搜索区域左上角
|
|
383
|
+
400,
|
|
384
|
+
800, // 搜索区域右下角
|
|
385
|
+
5, // 最多找 5 个
|
|
386
|
+
1, // 从左到右查找
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
if (points.length > 0) {
|
|
390
|
+
logi(`找到 ${points.length} 个蓝色点`);
|
|
391
|
+
// 点击第一个找到的点
|
|
392
|
+
action.click(points[0].x, points[0].y, 100, false);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
image.release(imageId);
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### findMultiColor - 多点找色
|
|
400
|
+
|
|
401
|
+
```typescript
|
|
402
|
+
function findMultiColor(
|
|
403
|
+
imageId: string,
|
|
404
|
+
firstColor: string,
|
|
405
|
+
threshold: number,
|
|
406
|
+
points: string,
|
|
407
|
+
x: number,
|
|
408
|
+
y: number,
|
|
409
|
+
ex: number,
|
|
410
|
+
ey: number,
|
|
411
|
+
limit: number,
|
|
412
|
+
orz: number,
|
|
413
|
+
): { x: number; y: number }[];
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**参数:**
|
|
417
|
+
|
|
418
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
419
|
+
| ------------ | ------ | -------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
420
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
421
|
+
| `firstColor` | string | 是 | - | 第一个颜色 |
|
|
422
|
+
| `threshold` | number | 是 | - | 颜色匹配阈值 (0.0-1.0) |
|
|
423
|
+
| `points` | string | 是 | - | 其他颜色点的相对位置和颜色,格式:`x1\|y1\|color1-偏色,x2\|y2\|color2-偏色` |
|
|
424
|
+
| `x, y` | number | 是 | - | 搜索区域左上角坐标 |
|
|
425
|
+
| `ex, ey` | number | 是 | - | 搜索区域右下角坐标 |
|
|
426
|
+
| `limit` | number | 是 | - | 最大查找数量 |
|
|
427
|
+
| `orz` | number | 是 | - | 查找方向(1-8) 1 左上角到右下角,纵向开始 2 左上角到右下角,横向开始 3 右上角到左下角,横向开始 4 右上角到左下角,纵向开始 5 右下角到左上角,纵向开始 6 右下角到左上角,横向开始 7 左下角到右上角,横向开始 8 左下角到右上角,纵向开始 |
|
|
428
|
+
|
|
429
|
+
**返回值:**
|
|
430
|
+
|
|
431
|
+
| 类型 | 描述 |
|
|
432
|
+
| ------- | ---------------------------------------------- |
|
|
433
|
+
| `array` | 找到的颜色点数组,每个元素包含 `x` 和 `y` 属性 |
|
|
434
|
+
|
|
435
|
+
**示例:**
|
|
436
|
+
|
|
437
|
+
```javascript
|
|
438
|
+
const imageId = image.captureFullScreen();
|
|
439
|
+
if (imageId) {
|
|
440
|
+
// 查找特定的颜色组合(如按钮的特征颜色)
|
|
441
|
+
const points = image.findMultiColor(
|
|
442
|
+
imageId,
|
|
443
|
+
"#1E90FF-#101010", // 主颜色
|
|
444
|
+
0.9, // 阈值
|
|
445
|
+
"10|0|#FFFFFF-#101010,20|0|#000000-#101010", // 相对位置的其他颜色
|
|
446
|
+
0,
|
|
447
|
+
0,
|
|
448
|
+
400,
|
|
449
|
+
800,
|
|
450
|
+
1,
|
|
451
|
+
1,
|
|
452
|
+
);
|
|
453
|
+
|
|
454
|
+
if (points.length > 0) {
|
|
455
|
+
logi("找到匹配的颜色组合");
|
|
456
|
+
action.click(points[0].x, points[0].y, 100, false);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
image.release(imageId);
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### cmpColor - 多点比色
|
|
464
|
+
|
|
465
|
+
```typescript
|
|
466
|
+
function cmpColor(imageId: string, points: string, threshold: number): boolean;
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
**参数:**
|
|
470
|
+
|
|
471
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
472
|
+
| ----------- | ------ | -------- | ------ | --------------------------------------------------------------------------- |
|
|
473
|
+
| `imageId` | string | 是 | - | 图片 ID |
|
|
474
|
+
| `points` | string | 是 | - | 其他颜色点的相对位置和颜色,格式:`x1\|y1\|color1-偏色,x2\|y2\|color2-偏色` |
|
|
475
|
+
| `threshold` | number | 是 | - | 颜色匹配阈值 (0.0-1.0) |
|
|
476
|
+
|
|
477
|
+
**返回值:**
|
|
478
|
+
|
|
479
|
+
| 类型 | 描述 |
|
|
480
|
+
| --------- | ------------------------------------------- |
|
|
481
|
+
| `boolean` | 如果颜色匹配则返回 `true`,否则返回 `false` |
|
|
482
|
+
|
|
483
|
+
**示例:**
|
|
484
|
+
|
|
485
|
+
```javascript
|
|
486
|
+
const imageId = image.captureFullScreen();
|
|
487
|
+
if (imageId) {
|
|
488
|
+
// 检查特定区域是否为预期颜色
|
|
489
|
+
const isMatch = image.cmpColor(
|
|
490
|
+
imageId,
|
|
491
|
+
"1|2|#6DD1E6-#101010",
|
|
492
|
+
0.9, // 阈值
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
if (isMatch) {
|
|
496
|
+
logi("颜色匹配");
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
image.release(imageId);
|
|
500
|
+
}
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
## 图像识别
|
|
504
|
+
|
|
505
|
+
### findImage - 找图
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
function findImage(
|
|
509
|
+
imageId: string,
|
|
510
|
+
templateImageId: string,
|
|
511
|
+
x: number,
|
|
512
|
+
y: number,
|
|
513
|
+
ex: number,
|
|
514
|
+
ey: number,
|
|
515
|
+
threshold: number,
|
|
516
|
+
limit: number,
|
|
517
|
+
method: number,
|
|
518
|
+
rgb?: boolean,
|
|
519
|
+
options?: {
|
|
520
|
+
scaleFactors?: number[];
|
|
521
|
+
},
|
|
522
|
+
): {
|
|
523
|
+
index: number; // 模板图片索引
|
|
524
|
+
x: number;
|
|
525
|
+
y: number;
|
|
526
|
+
width: number;
|
|
527
|
+
height: number;
|
|
528
|
+
confidence: number;
|
|
529
|
+
ex: number;
|
|
530
|
+
ey: number;
|
|
531
|
+
centerX: number;
|
|
532
|
+
centerY: number;
|
|
533
|
+
}[];
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
**参数:**
|
|
537
|
+
|
|
538
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
539
|
+
| ---------------------- | --------- | -------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
540
|
+
| `imageId` | string | 是 | - | `"screen"`-当前屏幕截图, `string`-图片文件路径或 URL ,`imageId`-图片 ID(通过 image 模块获取) |
|
|
541
|
+
| `templateImageId` | string | 是 | - | `"screen"`-当前屏幕截图, `string`-图片文件路径或 URL ,`imageId`-图片 ID(通过 image 模块获取)支持按\|分割,多个图片按顺序查找 |
|
|
542
|
+
| `x, y` | number | 是 | - | 搜索区域左上角坐标 |
|
|
543
|
+
| `ex, ey` | number | 是 | - | 搜索区域右下角坐标 |
|
|
544
|
+
| `threshold` | number | 是 | - | 匹配阈值 (0.0-1.0) 全分辨率匹配时建议 0.5-0.6 其他建议 0.9-0.995 |
|
|
545
|
+
| `limit` | number | 是 | - | 最大查找数量,每个模板图片最多找 limit 个匹配结果 |
|
|
546
|
+
| `method` | number | 是 | - | 匹配方法 0 SIFT 全分辨率 1 TM_SQDIFF_NORMED 3 TM_CCORR_NORMED 5 TM_CCOEFF_NORMED 99 全分辨率缩放匹配法 |
|
|
547
|
+
| `rgb` | boolean | 否 | `false` | 是否使用 RGB 找图,默认 `false` 会自动转灰度找图 |
|
|
548
|
+
| `options` | object | 否 | - | 选项 |
|
|
549
|
+
| `options.scaleFactors` | number\[] | 否 | `[1.0, 0.9, 1.1, 0.8, 1.2]` | 缩放匹配法缩放因子数组,默认 `[1.0, 0.9, 1.1, 0.8, 1.2]` 会在这些缩放比例下进行匹配。 |
|
|
550
|
+
|
|
551
|
+
**返回值:**
|
|
552
|
+
|
|
553
|
+
| 类型 | 描述 |
|
|
554
|
+
| ------- | ------------------------------------------------------------------------------------------ |
|
|
555
|
+
| `array` | 找到的匹配结果数组,每个元素包含位置、尺寸和置信度,其中 index 代表模板图片的索引从 0 开始 |
|
|
556
|
+
|
|
557
|
+
**示例:**
|
|
558
|
+
|
|
559
|
+
```javascript
|
|
560
|
+
const matches = image.findImage(
|
|
561
|
+
"screen",
|
|
562
|
+
"template.jpg|template2.jpg",
|
|
563
|
+
0,
|
|
564
|
+
0,
|
|
565
|
+
400,
|
|
566
|
+
800, // 搜索区域
|
|
567
|
+
0.8, // 80% 匹配度
|
|
568
|
+
3, // 最多找 3 个
|
|
569
|
+
5, // 匹配方法
|
|
570
|
+
false, // 不使用 rgb 找图
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
if (matches.length > 0) {
|
|
574
|
+
const best = matches[0];
|
|
575
|
+
logi(`找到匹配,置信度: ${best.confidence}`);
|
|
576
|
+
|
|
577
|
+
// 点击匹配区域的中心
|
|
578
|
+
const centerX = best.centerX;
|
|
579
|
+
const centerY = best.centerY;
|
|
580
|
+
action.click(centerX, centerY, 100, false);
|
|
581
|
+
}
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
## 图像处理
|
|
585
|
+
|
|
586
|
+
### clip - 裁剪图片。
|
|
587
|
+
|
|
588
|
+
```typescript
|
|
589
|
+
function clip(
|
|
590
|
+
imageId: string,
|
|
591
|
+
x: number,
|
|
592
|
+
y: number,
|
|
593
|
+
ex: number,
|
|
594
|
+
ey: number,
|
|
595
|
+
): string;
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
**参数:**
|
|
599
|
+
|
|
600
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
601
|
+
| --------- | ------ | -------- | ------ | ------------------ |
|
|
602
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
603
|
+
| `x, y` | number | 是 | - | 裁剪区域左上角坐标 |
|
|
604
|
+
| `ex, ey` | number | 是 | - | 裁剪区域右下角坐标 |
|
|
605
|
+
|
|
606
|
+
**返回值:**
|
|
607
|
+
|
|
608
|
+
| 类型 | 描述 |
|
|
609
|
+
| -------- | ----------------- |
|
|
610
|
+
| `string` | 裁剪后的新图片 ID |
|
|
611
|
+
|
|
612
|
+
**示例:**
|
|
613
|
+
|
|
614
|
+
```javascript
|
|
615
|
+
const imageId = image.captureFullScreen();
|
|
616
|
+
// 获取手机文档目录
|
|
617
|
+
const dir = file.getInternalDir("documents");
|
|
618
|
+
if (imageId) {
|
|
619
|
+
// 裁剪屏幕上半部分
|
|
620
|
+
const screen = device.getScreenRealSize();
|
|
621
|
+
const clippedId = image.clip(imageId, 0, 0, screen.width, screen.height / 2);
|
|
622
|
+
|
|
623
|
+
if (clippedId) {
|
|
624
|
+
image.saveTo(clippedId, `${dir}/top_half.jpg`);
|
|
625
|
+
image.release(clippedId);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
image.release(imageId);
|
|
629
|
+
}
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### rotateImage - 旋转图片。
|
|
633
|
+
|
|
634
|
+
```typescript
|
|
635
|
+
function rotateImage(imageId: string, degree: number): string | null;
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
**参数:**
|
|
639
|
+
|
|
640
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
641
|
+
| --------- | ------ | -------- | ------ | ----------------------------- |
|
|
642
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
643
|
+
| `degree` | number | 是 | - | 旋转角度,只能是 90、-90、180 |
|
|
644
|
+
|
|
645
|
+
**返回值:**
|
|
646
|
+
|
|
647
|
+
| 类型 | 描述 |
|
|
648
|
+
| ---------------- | ----------------------------------- |
|
|
649
|
+
| `string \| null` | 旋转后的新图片 ID 失败时返回 `null` |
|
|
650
|
+
|
|
651
|
+
**示例:**
|
|
652
|
+
|
|
653
|
+
```typescript
|
|
654
|
+
const imageId = image.readImage("photo.jpg");
|
|
655
|
+
// 获取手机文档目录
|
|
656
|
+
const dir = file.getInternalDir("documents");
|
|
657
|
+
if (imageId) {
|
|
658
|
+
const rotatedId = image.rotateImage(imageId, 90);
|
|
659
|
+
if (rotatedId) {
|
|
660
|
+
image.saveTo(rotatedId, `${dir}/photo_rotated.jpg`);
|
|
661
|
+
image.release(rotatedId);
|
|
662
|
+
}
|
|
663
|
+
image.release(imageId);
|
|
664
|
+
}
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
### gray - 将图片转换为灰度图。
|
|
668
|
+
|
|
669
|
+
```typescript
|
|
670
|
+
function gray(imageId: string): string;
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
**参数:**
|
|
674
|
+
|
|
675
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
676
|
+
| --------- | ------ | -------- | ------ | --------- |
|
|
677
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
678
|
+
|
|
679
|
+
**返回值:**
|
|
680
|
+
|
|
681
|
+
| 类型 | 描述 |
|
|
682
|
+
| -------- | ------------------- |
|
|
683
|
+
| `string` | 灰度化后的新图片 ID |
|
|
684
|
+
|
|
685
|
+
**示例:**
|
|
686
|
+
|
|
687
|
+
```javascript
|
|
688
|
+
const imageId = image.captureFullScreen();
|
|
689
|
+
// 获取手机文档目录
|
|
690
|
+
const dir = file.getInternalDir("documents");
|
|
691
|
+
if (imageId) {
|
|
692
|
+
const grayId = image.gray(imageId);
|
|
693
|
+
image.saveTo(grayId, `${dir}/screenshot_gray.jpg`);
|
|
694
|
+
image.release(grayId);
|
|
695
|
+
image.release(imageId);
|
|
696
|
+
}
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
### binaryzation - 将图片进行二值化处理。
|
|
700
|
+
|
|
701
|
+
```typescript
|
|
702
|
+
function binaryzation(imageId: string, threshold: number): string;
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
**参数:**
|
|
706
|
+
|
|
707
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
708
|
+
| ----------- | ------ | -------- | ------ | ---------------------- |
|
|
709
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
710
|
+
| `threshold` | number | 是 | - | 二值化阈值 (0.0-255.0) |
|
|
711
|
+
|
|
712
|
+
**返回值:**
|
|
713
|
+
|
|
714
|
+
| 类型 | 描述 |
|
|
715
|
+
| -------- | ------------------- |
|
|
716
|
+
| `string` | 二值化后的新图片 ID |
|
|
717
|
+
|
|
718
|
+
**示例:**
|
|
719
|
+
|
|
720
|
+
```javascript
|
|
721
|
+
const imageId = image.captureFullScreen();
|
|
722
|
+
// 获取手机文档目录
|
|
723
|
+
const dir = file.getInternalDir("documents");
|
|
724
|
+
if (imageId) {
|
|
725
|
+
const binaryId = image.binaryzation(imageId, 128);
|
|
726
|
+
image.saveTo(binaryId, `${dir}/screenshot_binary.jpg`);
|
|
727
|
+
image.release(binaryId);
|
|
728
|
+
image.release(imageId);
|
|
729
|
+
}
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
### drawRect - 绘制矩形。
|
|
733
|
+
|
|
734
|
+
```typescript
|
|
735
|
+
function drawRect(
|
|
736
|
+
imageId: string,
|
|
737
|
+
x: number,
|
|
738
|
+
y: number,
|
|
739
|
+
ex: number,
|
|
740
|
+
ey: number,
|
|
741
|
+
color: string,
|
|
742
|
+
thickness: number,
|
|
743
|
+
): void;
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
**参数:**
|
|
747
|
+
|
|
748
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
749
|
+
| ----------- | ------ | -------- | ------ | --------------------------- |
|
|
750
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
751
|
+
| `x, y` | number | 是 | - | 矩形左上角坐标 |
|
|
752
|
+
| `ex, ey` | number | 是 | - | 矩形右下角坐标 |
|
|
753
|
+
| `color` | string | 是 | - | 颜色,如 "#FF0000" 表示红色 |
|
|
754
|
+
| `thickness` | number | 是 | - | 线宽 |
|
|
755
|
+
|
|
756
|
+
**示例:**
|
|
757
|
+
|
|
758
|
+
```javascript
|
|
759
|
+
// 获取手机文档目录
|
|
760
|
+
const dir = file.getInternalDir("documents");
|
|
761
|
+
|
|
762
|
+
const imageId = image.captureFullScreen();
|
|
763
|
+
if (imageId) {
|
|
764
|
+
image.drawRect(imageId, 100, 100, 200, 100, "#FF0000", 2);
|
|
765
|
+
image.saveTo(imageId, `${dir}/test.jpg`);
|
|
766
|
+
image.release(imageId);
|
|
767
|
+
}
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
### scanCode - 扫码条码(支持一维码和二维码)
|
|
771
|
+
|
|
772
|
+
```typescript
|
|
773
|
+
function scanCode(imageId: string): string | null;
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
**参数:**
|
|
777
|
+
|
|
778
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
779
|
+
| --------- | ------ | -------- | ------ | --------- |
|
|
780
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
781
|
+
|
|
782
|
+
**返回值:**
|
|
783
|
+
|
|
784
|
+
| 类型 | 描述 |
|
|
785
|
+
| ---------------- | --------------------------- |
|
|
786
|
+
| `string \| null` | 扫码结果,失败时返回 `null` |
|
|
787
|
+
|
|
788
|
+
**示例:**
|
|
789
|
+
|
|
790
|
+
```javascript
|
|
791
|
+
const imageId = image.captureFullScreen();
|
|
792
|
+
if (imageId) {
|
|
793
|
+
const result = image.scanCode(imageId);
|
|
794
|
+
if (result) {
|
|
795
|
+
logi(`扫码结果: ${result}`);
|
|
796
|
+
} else {
|
|
797
|
+
logi("扫码失败");
|
|
798
|
+
}
|
|
799
|
+
image.release(imageId);
|
|
800
|
+
}
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
## Base64 转换
|
|
804
|
+
|
|
805
|
+
### base64ToImage - 将 Base64 字符串转换为图片。
|
|
806
|
+
|
|
807
|
+
```typescript
|
|
808
|
+
function base64ToImage(base64: string): string;
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
**参数:**
|
|
812
|
+
|
|
813
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
814
|
+
| -------- | ------ | -------- | ------ | ------------- |
|
|
815
|
+
| `base64` | string | 是 | - | Base64 字符串 |
|
|
816
|
+
|
|
817
|
+
**返回值:**
|
|
818
|
+
|
|
819
|
+
| 类型 | 描述 |
|
|
820
|
+
| -------- | --------------- |
|
|
821
|
+
| `string` | 转换后的图片 ID |
|
|
822
|
+
|
|
823
|
+
**示例:**
|
|
824
|
+
|
|
825
|
+
```javascript
|
|
826
|
+
const base64Data =
|
|
827
|
+
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==";
|
|
828
|
+
const imageId = image.base64ToImage(base64Data);
|
|
829
|
+
|
|
830
|
+
// 获取手机文档目录
|
|
831
|
+
const dir = file.getInternalDir("documents");
|
|
832
|
+
if (imageId) {
|
|
833
|
+
image.saveTo(imageId, `${dir}/base64.jpg`);
|
|
834
|
+
image.release(imageId);
|
|
835
|
+
}
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
### toBase64Format - 将图片转换为 Base64 字符串。
|
|
839
|
+
|
|
840
|
+
```typescript
|
|
841
|
+
function toBase64Format(imageId: string, format: string, q: number): string;
|
|
842
|
+
```
|
|
843
|
+
|
|
844
|
+
**参数:**
|
|
845
|
+
|
|
846
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
847
|
+
| --------- | ------ | -------- | ------ | ------------------------------ |
|
|
848
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
849
|
+
| `format` | string | 是 | - | 图片格式(如 "jpg", "png") |
|
|
850
|
+
| `q` | number | 是 | - | 质量 (1-100),数字越大质量越高 |
|
|
851
|
+
|
|
852
|
+
**返回值:**
|
|
853
|
+
|
|
854
|
+
| 类型 | 描述 |
|
|
855
|
+
| -------- | ---------------------- |
|
|
856
|
+
| `string` | 转换后的 Base64 字符串 |
|
|
857
|
+
|
|
858
|
+
**示例:**
|
|
859
|
+
|
|
860
|
+
```javascript
|
|
861
|
+
const imageId = image.captureFullScreen();
|
|
862
|
+
if (imageId) {
|
|
863
|
+
const base64 = image.toBase64Format(imageId, "jpg", 90);
|
|
864
|
+
logi(`Base64 数据: ${base64.substring(0, 100)}...`);
|
|
865
|
+
image.release(imageId);
|
|
866
|
+
}
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
## 安卓独有方法
|
|
870
|
+
|
|
871
|
+
### getBitmap - 获取安卓的Bitmap对象
|
|
872
|
+
|
|
873
|
+
此方法仅在安卓可用,用于获取图片的 Bitmap 对象。
|
|
874
|
+
|
|
875
|
+
```typescript
|
|
876
|
+
function getBitmap(imageId: string): any;
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
**参数:**
|
|
880
|
+
|
|
881
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
882
|
+
| --------- | ------ | -------- | ------ | --------- |
|
|
883
|
+
| `imageId` | string | 是 | - | 原图片 ID |
|
|
884
|
+
|
|
885
|
+
**返回值:**
|
|
886
|
+
|
|
887
|
+
| 类型 | 描述 |
|
|
888
|
+
| ----- | ---------------- |
|
|
889
|
+
| `any` | 安卓的Bitmap对象 |
|
|
890
|
+
|
|
891
|
+
**示例:**
|
|
892
|
+
|
|
893
|
+
```javascript
|
|
894
|
+
const imageId = image.captureFullScreen();
|
|
895
|
+
if (imageId) {
|
|
896
|
+
const bitmap = image.getBitmap(imageId);
|
|
897
|
+
logi(`Bitmap 对象: ${bitmap}`);
|
|
898
|
+
// 注意:使用完 Bitmap 后,需要调用 recycle() 方法释放内存
|
|
899
|
+
bitmap.recycle();
|
|
900
|
+
image.release(imageId);
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
// 快捷获取截屏bitmap
|
|
904
|
+
const bitmap = image.getBitmap("screen");
|
|
905
|
+
logi(`Bitmap 对象: ${bitmap}`);
|
|
906
|
+
bitmap.recycle();
|
|
907
|
+
```
|