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