translime-plugin-hdr-capture 1.0.0

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.
@@ -0,0 +1,118 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ /** 显示器信息 */
7
+ export interface DisplayInfo {
8
+ /** 显示器索引 */
9
+ id: number
10
+ /** 显示器名称 */
11
+ name: string
12
+ /** 左边界 */
13
+ x: number
14
+ /** 上边界 */
15
+ y: number
16
+ /** 宽度 */
17
+ width: number
18
+ /** 高度 */
19
+ height: number
20
+ /** 是否主显示器 */
21
+ isPrimary: boolean
22
+ }
23
+ /** 窗口信息结构 */
24
+ export interface WindowInfo {
25
+ /** 窗口句柄 (HWND) */
26
+ handle: number
27
+ /** 窗口标题 */
28
+ title: string
29
+ /** 窗口类名 */
30
+ className: string
31
+ /** 左边界 */
32
+ left: number
33
+ /** 上边界 */
34
+ top: number
35
+ /** 右边界 */
36
+ right: number
37
+ /** 下边界 */
38
+ bottom: number
39
+ /** 窗口宽度 */
40
+ width: number
41
+ /** 窗口高度 */
42
+ height: number
43
+ }
44
+ /** 矩形区域 */
45
+ export interface Rect {
46
+ x: number
47
+ y: number
48
+ width: number
49
+ height: number
50
+ }
51
+ /** Tone Mapping 选项 */
52
+ export interface ToneMappingOptions {
53
+ /** 曝光值调整 */
54
+ exposure?: number
55
+ /** 是否保留 HDR 元数据 */
56
+ preserveHdrMetadata?: boolean
57
+ }
58
+ /** HDR 映射配置选项 */
59
+ export interface HdrMappingOptions {
60
+ /** 是否启用自定义 HDR 映射 */
61
+ enabled?: boolean
62
+ /** SDR 白点亮度 (nits),默认 203 */
63
+ sdrWhiteNits?: number
64
+ /** HDR 峰值亮度 (nits),默认 1000 */
65
+ hdrMaxNits?: number
66
+ /** 是否同时保留原始 HDR 数据(用于后续保存 HDR 原始文件) */
67
+ preserveRaw?: boolean
68
+ }
69
+ /** 屏幕捕获结果 */
70
+ export interface CaptureResult {
71
+ /** 图像数据 (RGBA,经过 Tone Mapping) */
72
+ buffer: Buffer
73
+ /** 实际图像宽度 (物理像素) */
74
+ width: number
75
+ /** 实际图像高度 (物理像素) */
76
+ height: number
77
+ /** 是否为 HDR 源数据(经过 Tonemap) */
78
+ isHdr: boolean
79
+ /**
80
+ * 原始 HDR 数据 (可选,仅当 preserve_raw 为 true 且为 HDR 屏幕时存在)
81
+ * 保存为 RGBA Float16 或 10bit 原始格式的字节流
82
+ */
83
+ rawHdrBuffer?: Buffer
84
+ }
85
+ /** 获取所有顶层窗口 */
86
+ export declare function getTopLevelWindows(): Array<WindowInfo>
87
+ /** 获取指定坐标处的窗口 */
88
+ export declare function getWindowAtPoint(x: number, y: number, ignoreHandle?: number | undefined | null): WindowInfo | null
89
+ /**
90
+ * 捕获指定显示器的屏幕 (返回 RGBA 结果对象)
91
+ *
92
+ * `hdr_options` - 可选的 HDR 映射配置,用于自定义色调映射参数
93
+ */
94
+ export declare function captureDisplay(displayId: number, hdrOptions?: HdrMappingOptions | undefined | null): Promise<CaptureResult>
95
+ /** 获取显示器列表 */
96
+ export declare function getDisplays(): Array<DisplayInfo>
97
+ /** 裁剪图像 */
98
+ export declare function cropImage(buffer: Buffer, width: number, height: number, rect: Rect): Promise<Buffer>
99
+ /** HDR 到 SDR 的 Tone Mapping */
100
+ export declare function toneMap(hdrBuffer: Buffer, width: number, height: number, options?: ToneMappingOptions | undefined | null): Promise<Buffer>
101
+ /** 编码图像为指定格式 */
102
+ export declare function encodeImage(buffer: Buffer, width: number, height: number, format: string): Promise<Buffer>
103
+ /** 调整图像大小 */
104
+ export declare function resizeImage(buffer: Buffer, width: number, height: number, newWidth: number, newHeight: number): Promise<Buffer>
105
+ /**
106
+ * 将原始 HDR F16 数据编码为 EXR 格式
107
+ *
108
+ * 输入: RGBA F16 格式的原始 HDR 数据 (每像素 8 字节)
109
+ * 输出: OpenEXR 文件字节流
110
+ */
111
+ export declare function encodeHdrToExr(rawBuffer: Buffer, width: number, height: number): Promise<Buffer>
112
+ /**
113
+ * 裁剪 HDR F16 格式的原始数据
114
+ *
115
+ * 输入: RGBA F16 格式的原始 HDR 数据 (每像素 8 字节)
116
+ * 输出: 裁剪后的 RGBA F16 数据
117
+ */
118
+ export declare function cropHdrF16(rawBuffer: Buffer, width: number, height: number, rect: Rect): Promise<Buffer>
@@ -0,0 +1,324 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'index.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./index.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('hdr-capture-native-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'index.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./index.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('hdr-capture-native-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'index.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./index.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('hdr-capture-native-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'index.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./index.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('hdr-capture-native-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'index.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./index.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('hdr-capture-native-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'index.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./index.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('hdr-capture-native-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'index.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./index.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('hdr-capture-native-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'index.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./index.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('hdr-capture-native-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'index.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./index.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('hdr-capture-native-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'index.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./index.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('hdr-capture-native-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'index.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./index.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('hdr-capture-native-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'index.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./index.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('hdr-capture-native-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'index.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./index.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('hdr-capture-native-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'index.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./index.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('hdr-capture-native-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'index.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./index.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('hdr-capture-native-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'index.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./index.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('hdr-capture-native-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'index.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./index.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('hdr-capture-native-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'index.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./index.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('hdr-capture-native-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
304
+ }
305
+
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
312
+
313
+ const { getTopLevelWindows, getWindowAtPoint, captureDisplay, getDisplays, cropImage, toneMap, encodeImage, resizeImage, encodeHdrToExr, cropHdrF16 } = nativeBinding
314
+
315
+ module.exports.getTopLevelWindows = getTopLevelWindows
316
+ module.exports.getWindowAtPoint = getWindowAtPoint
317
+ module.exports.captureDisplay = captureDisplay
318
+ module.exports.getDisplays = getDisplays
319
+ module.exports.cropImage = cropImage
320
+ module.exports.toneMap = toneMap
321
+ module.exports.encodeImage = encodeImage
322
+ module.exports.resizeImage = resizeImage
323
+ module.exports.encodeHdrToExr = encodeHdrToExr
324
+ module.exports.cropHdrF16 = cropHdrF16