• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (ImageReceiver)
2<!--Kit: Image Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @aulight02-->
5<!--Designer: @liyang_bryan-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9> **说明:**
10>
11> - 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12> - 本Interface首批接口从API version 9开始支持。
13
14图像接收类,用于获取组件surface id,接收最新的图片和读取下一张图片,以及释放ImageReceiver实例。ImageReceiver做为图片的接收方、消费者,它的参数属性实际上不会对接收到的图片产生影响。图片属性的配置应在发送方、生产者进行,如相机预览流[createPreviewOutput](../apis-camera-kit/arkts-apis-camera-CameraManager.md#createpreviewoutput)。
15
16在调用以下方法前需要先通过[createImageReceiver](arkts-apis-image-f.md#imagecreateimagereceiver11)创建ImageReceiver实例。
17
18## 导入模块
19
20```ts
21import { image } from '@kit.ImageKit';
22```
23
24## 属性
25
26**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
27
28| 名称     | 类型                         | 只读 | 可选 | 说明               |
29| -------- | ---------------------------- | ---- | ---- | ------------------ |
30| size<sup>9+</sup>     | [Size](arkts-apis-image-i.md#size)                | 是   | 否   | 图片大小。该参数不会影响接收到的图片大小,实际返回大小由生产者决定,如相机。         |
31| capacity<sup>9+</sup> | number                       | 是   | 否   | 同时访问的图像数。该参数仅作为期望值,实际capacity由设备硬件决定。 |
32| format<sup>9+</sup>   | [ImageFormat](arkts-apis-image-e.md#imageformat9) | 是   | 否   | 图像格式,取值为[ImageFormat](arkts-apis-image-e.md#imageformat9)常量(目前仅支持 ImageFormat:JPEG,实际返回格式由生产者决定,如相机)        |
33
34## getReceivingSurfaceId<sup>9+</sup>
35
36getReceivingSurfaceId(callback: AsyncCallback\<string>): void
37
38用于获取一个surface id供Camera或其他组件使用。使用callback返回结果。
39
40**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
41
42**参数:**
43
44| 参数名   | 类型                   | 必填 | 说明                       |
45| -------- | ---------------------- | ---- | -------------------------- |
46| callback | AsyncCallback\<string> | 是   | 回调函数,当获取surface id成功,err为undefined,data为获取到的surface id;否则为错误对象。 |
47
48**示例:**
49
50```ts
51import { BusinessError } from '@kit.BasicServicesKit';
52
53async function GetReceivingSurfaceId(receiver : image.ImageReceiver) {
54  receiver.getReceivingSurfaceId((err: BusinessError, id: string) => {
55    if (err) {
56      console.error(`Failed to get the ReceivingSurfaceId.code ${err.code},message is ${err.message}`);
57    } else {
58      console.info('Succeeded in getting the ReceivingSurfaceId.');
59    }
60  });
61}
62```
63
64## getReceivingSurfaceId<sup>9+</sup>
65
66getReceivingSurfaceId(): Promise\<string>
67
68用于获取一个surface id供Camera或其他组件使用。使用promise返回结果。
69
70**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
71
72**返回值:**
73
74| 类型             | 说明                 |
75| ---------------- | -------------------- |
76| Promise\<string> | Promise对象,返回surface id。 |
77
78**示例:**
79
80```ts
81import { BusinessError } from '@kit.BasicServicesKit';
82
83async function GetReceivingSurfaceId(receiver : image.ImageReceiver) {
84  receiver.getReceivingSurfaceId().then((id: string) => {
85    console.info('Succeeded in getting the ReceivingSurfaceId.');
86  }).catch((error: BusinessError) => {
87    console.error(`Failed to get the ReceivingSurfaceId.code ${error.code},message is ${error.message}`);
88  })
89}
90```
91
92## readLatestImage<sup>9+</sup>
93
94readLatestImage(callback: AsyncCallback\<Image>): void
95
96从ImageReceiver读取最新的图片,并使用callback返回结果。
97
98**注意**:此接口需要在[on](#on9)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](arkts-apis-image-Image.md)对象使用完毕后需要调用[release](arkts-apis-image-Image.md#release9)方法释放,释放后才可以继续接收新的数据。
99
100**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
101
102**参数:**
103
104| 参数名     | 类型                            | 必填 | 说明                     |
105| -------- | ------------------------------- | ---- | ------------------------ |
106| callback | AsyncCallback<[Image](arkts-apis-image-Image.md)> | 是   | 回调函数,当读取最新图片成功,err为undefined,data为获取到的最新图片;否则为错误对象。  |
107
108**示例:**
109
110```ts
111import { BusinessError } from '@kit.BasicServicesKit';
112
113async function ReadLatestImage(receiver : image.ImageReceiver) {
114  receiver.readLatestImage((err: BusinessError, img: image.Image) => {
115    if (err) {
116      console.error(`Failed to read the latest Image.code ${err.code},message is ${err.message}`);
117    } else {
118      console.info('Succeeded in reading the latest Image.');
119    }
120  });
121}
122```
123
124## readLatestImage<sup>9+</sup>
125
126readLatestImage(): Promise\<Image>
127
128从ImageReceiver读取最新的图片,并使用promise返回结果。
129
130**注意**:此接口需要在[on](#on9)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](arkts-apis-image-Image.md)对象使用完毕后需要调用[release](arkts-apis-image-Image.md#release9)方法释放,释放后才可以继续接收新的数据。
131
132**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
133
134**返回值:**
135
136| 类型                      | 说明               |
137| ------------------------- | ------------------ |
138| Promise<[Image](arkts-apis-image-Image.md)> | Promise对象,返回最新图片。 |
139
140**示例:**
141
142```ts
143import { BusinessError } from '@kit.BasicServicesKit';
144
145async function ReadLatestImage(receiver : image.ImageReceiver) {
146  receiver.readLatestImage().then((img: image.Image) => {
147    console.info('Succeeded in reading the latest Image.');
148  }).catch((error: BusinessError) => {
149    console.error(`Failed to read the latest Image.code ${error.code},message is ${error.message}`);
150  });
151}
152```
153
154## readNextImage<sup>9+</sup>
155
156readNextImage(callback: AsyncCallback\<Image>): void
157
158从ImageReceiver读取下一张图片,并使用callback返回结果。
159
160**注意**:此接口需要在[on](#on9)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](arkts-apis-image-Image.md)对象使用完毕后需要调用[release](arkts-apis-image-Image.md#release9)方法释放,释放后才可以继续接收新的数据。
161
162**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
163
164**参数:**
165
166| 参数名   | 类型                            | 必填 | 说明                       |
167| -------- | ------------------------------- | ---- | -------------------------- |
168| callback | AsyncCallback<[Image](arkts-apis-image-Image.md)> | 是   | 回调函数,当获取下一张图片成功,err为undefined,data为获取到的下一张图片;否则为错误对象。  |
169
170**示例:**
171
172```ts
173import { BusinessError } from '@kit.BasicServicesKit';
174
175async function ReadNextImage(receiver : image.ImageReceiver) {
176  receiver.readNextImage((err: BusinessError, img: image.Image) => {
177    if (err) {
178      console.error(`Failed to read the next Image.code ${err.code},message is ${err.message}`);
179    } else {
180      console.info('Succeeded in reading the next Image.');
181    }
182  });
183}
184```
185
186## readNextImage<sup>9+</sup>
187
188readNextImage(): Promise\<Image>
189
190从ImageReceiver读取下一张图片,并使用promise返回结果。
191
192**注意**:此接口需要在[on](#on9)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](arkts-apis-image-Image.md)对象使用完毕后需要调用[release](arkts-apis-image-Image.md#release9)方法释放,释放后才可以继续接收新的数据。
193
194**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
195
196**返回值:**
197
198| 类型                      | 说明                 |
199| ------------------------- | -------------------- |
200| Promise<[Image](arkts-apis-image-Image.md)> | Promise对象,返回下一张图片。 |
201
202**示例:**
203
204```ts
205import { BusinessError } from '@kit.BasicServicesKit';
206
207async function ReadNextImage(receiver : image.ImageReceiver) {
208  receiver.readNextImage().then((img: image.Image) => {
209    console.info('Succeeded in reading the next Image.');
210  }).catch((error: BusinessError) => {
211    console.error(`Failed to read the next Image.code ${error.code},message is ${error.message}`);
212  });
213}
214```
215
216## on<sup>9+</sup>
217
218on(type: 'imageArrival', callback: AsyncCallback\<void>): void
219
220接收图片时注册回调。
221
222**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
223
224**参数:**
225
226| 参数名   | 类型                 | 必填 | 说明                                                   |
227| -------- | -------------------- | ---- | ------------------------------------------------------ |
228| type     | string               | 是   | 注册事件的类型,固定为'imageArrival',接收图片时触发。 |
229| callback | AsyncCallback\<void> | 是   | 回调函数,当注册事件触发成功,err为undefined,否则为错误对象。                                        |
230
231**示例:**
232
233```ts
234async function On(receiver : image.ImageReceiver) {
235  receiver.on('imageArrival', () => {
236    // 接收到图片,实现回调函数逻辑。
237  });
238}
239```
240
241## off<sup>13+</sup>
242
243off(type: 'imageArrival', callback?: AsyncCallback\<void>): void
244
245释放buffer时移除注册回调。
246
247**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
248
249**参数:**
250
251| 参数名   | 类型                 | 必填 | 说明                                     |
252| -------- | -------------------- |----|----------------------------------------|
253| type     | string               | 是  | 注册事件的类型,固定为'imageArrival',释放buffer时触发。 |
254| callback | AsyncCallback\<void> | 否  | 移除的回调函数。         |
255
256**示例:**
257
258```ts
259async function Off(receiver : image.ImageReceiver) {
260  let callbackFunc = ()=>{
261      // 实现回调函数逻辑。
262  };
263  receiver.on('imageArrival', callbackFunc);
264  receiver.off('imageArrival', callbackFunc);
265}
266```
267
268## release<sup>9+</sup>
269
270release(callback: AsyncCallback\<void>): void
271
272释放ImageReceiver实例并使用回调返回结果。
273
274ArkTS有内存回收机制,ImageReceiver对象不调用release方法,内存最终也会由系统统一释放。但图片使用的内存往往较大,为尽快释放内存,建议应用在使用完成后主动调用release方法提前释放内存。
275
276**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
277
278**参数:**
279
280| 参数名   | 类型                 | 必填 | 说明                     |
281| -------- | -------------------- | ---- | ------------------------ |
282| callback | AsyncCallback\<void> | 是   | 回调函数,当释放ImageReceiver实例成功,err为undefined,否则为错误对象。  |
283
284**示例:**
285
286```ts
287import { BusinessError } from '@kit.BasicServicesKit';
288
289async function Release(receiver : image.ImageReceiver) {
290  receiver.release((err: BusinessError) => {
291    if (err) {
292      console.error(`Failed to release the receiver.code ${err.code},message is ${err.message}`);
293    } else {
294      console.info('Succeeded in releasing the receiver.');
295    }
296  })
297}
298```
299
300## release<sup>9+</sup>
301
302release(): Promise\<void>
303
304释放ImageReceiver实例并使用promise返回结果。
305
306ArkTS有内存回收机制,ImageReceiver对象不调用release方法,内存最终也会由系统统一释放。但图片使用的内存往往较大,为尽快释放内存,建议应用在使用完成后主动调用release方法提前释放内存。
307
308**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
309
310**返回值:**
311
312| 类型           | 说明               |
313| -------------- | ------------------ |
314| Promise\<void> |  Promise对象。无返回结果的Promise对象。 |
315
316**示例:**
317
318```ts
319import { BusinessError } from '@kit.BasicServicesKit';
320
321async function Release(receiver : image.ImageReceiver) {
322  receiver.release().then(() => {
323    console.info('Succeeded in releasing the receiver.');
324  }).catch((error: BusinessError) => {
325    console.error(`Failed to release the receiver.code ${error.code},message is ${error.message}`);
326  })
327}
328```
329