• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (ImageCreator)
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图像创建模块,用于请求图像数据区域,并开放给应用编译图像数据的能力。
15在调用以下方法前需要先通过[createImageCreator](arkts-apis-image-f.md#imagecreateimagecreator11)创建ImageCreator实例,ImageCreator不支持多线程。
16
17## 导入模块
18
19```ts
20import { image } from '@kit.ImageKit';
21```
22
23## 属性
24
25**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
26
27| 名称     | 类型                         | 只读 | 可选 | 说明               |
28| -------- | ---------------------------- | ---- | ---- | ------------------ |
29| capacity<sup>9+</sup> | number                       | 是   | 否   | 同时访问的图像数。该参数仅作为期望值,实际capacity由设备硬件决定。 |
30| format<sup>9+</sup>   | [ImageFormat](arkts-apis-image-e.md#imageformat9) | 是   | 否   | 图像格式。         |
31
32## dequeueImage<sup>9+</sup>
33
34dequeueImage(callback: AsyncCallback\<Image>): void
35
36从空闲队列中获取buffer图片,用于绘制UI内容,并使用callback返回结果。
37
38**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
39
40**参数:**
41
42| 参数名        | 类型                                    | 必填 | 说明                 |
43| ------------- | ---------------------------------------| ---- | -------------------- |
44| callback      | AsyncCallback\<[Image](arkts-apis-image-Image.md)>  | 是   | 回调函数,当获取最新图片成功,err为undefined,data为获取到的最新图片;否则为错误对象。  |
45
46**示例:**
47
48```ts
49import { BusinessError } from '@kit.BasicServicesKit';
50
51async function DequeueImage(creator : image.ImageCreator) {
52  creator.dequeueImage((err: BusinessError, img: image.Image) => {
53    if (err) {
54      console.error(`Failed to dequeue the Image.code ${err.code},message is ${err.message}`);
55    } else {
56      console.info('Succeeded in dequeuing the Image.');
57    }
58  });
59}
60```
61
62## dequeueImage<sup>9+</sup>
63
64dequeueImage(): Promise\<Image>
65
66从空闲队列中获取buffer图片,用于绘制UI内容,并使用promise返回结果。
67
68**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
69
70**返回值:**
71
72| 类型             | 说明           |
73| --------------- | ------------- |
74| Promise\<[Image](arkts-apis-image-Image.md)> | Promise对象,返回最新图片。 |
75
76**示例:**
77
78```ts
79import { BusinessError } from '@kit.BasicServicesKit';
80
81async function DequeueImage(creator : image.ImageCreator) {
82  creator.dequeueImage().then((img: image.Image) => {
83    console.info('Succeeded in dequeuing the Image.');
84  }).catch((error: BusinessError) => {
85    console.error(`Failed to dequeue the Image.code ${error.code},message is ${error.message}`);
86  })
87}
88```
89
90## queueImage<sup>9+</sup>
91
92queueImage(image: Image, callback: AsyncCallback\<void>): void
93
94将绘制好的图片放入队列,并使用callback返回结果。
95
96**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
97
98**参数:**
99
100| 参数名        | 类型                     | 必填 | 说明                 |
101| ------------- | -------------------------| ---- | -------------------- |
102| image     | [Image](arkts-apis-image-Image.md)                    | 是   | 绘制好的buffer图像。 |
103| callback      | AsyncCallback\<void>     | 是   | 回调函数,当将图片放入队列成功,err为undefined,否则为错误对象。  |
104
105**示例:**
106
107```ts
108import { BusinessError } from '@kit.BasicServicesKit';
109
110async function QueueImage(creator : image.ImageCreator) {
111  creator.dequeueImage().then((img: image.Image) => {
112    // 绘制图片。
113    img.getComponent(4).then((component : image.Component) => {
114      let bufferArr: Uint8Array = new Uint8Array(component.byteBuffer);
115      for (let i = 0; i < bufferArr.length; i += 4) {
116        bufferArr[i] = 0; // B
117        bufferArr[i + 1] = 0; // G
118        bufferArr[i + 2] = 255; // R
119        bufferArr[i + 3] = 255; // A
120      }
121    })
122    creator.queueImage(img, (err: BusinessError) => {
123      if (err) {
124        console.error(`Failed to queue the Image.code ${err.code},message is ${err.message}`);
125      } else {
126        console.info('Succeeded in queuing the Image.');
127      }
128    })
129  })
130}
131```
132
133## queueImage<sup>9+</sup>
134
135queueImage(image: Image): Promise\<void>
136
137将绘制好的图片放入队列,并使用promise返回结果。
138
139**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
140
141**参数:**
142
143| 参数名          | 类型     | 必填 | 说明                |
144| ------------- | --------| ---- | ------------------- |
145| image     | [Image](arkts-apis-image-Image.md)   | 是   | 绘制好的buffer图像。 |
146
147**返回值:**
148
149| 类型            | 说明           |
150| -------------- | ------------- |
151| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
152
153**示例:**
154
155```ts
156import { BusinessError } from '@kit.BasicServicesKit';
157
158async function QueueImage(creator : image.ImageCreator) {
159  creator.dequeueImage().then((img: image.Image) => {
160    // 绘制图片。
161    img.getComponent(4).then((component: image.Component) => {
162      let bufferArr: Uint8Array = new Uint8Array(component.byteBuffer);
163      for (let i = 0; i < bufferArr.length; i += 4) {
164        bufferArr[i] = 0; // B
165        bufferArr[i + 1] = 0; // G
166        bufferArr[i + 2] = 255; // R
167        bufferArr[i + 3] = 255; // A
168      }
169    })
170    creator.queueImage(img).then(() => {
171      console.info('Succeeded in queuing the Image.');
172    }).catch((error: BusinessError) => {
173      console.error(`Failed to queue the Image.code ${error.code},message is ${error.message}`);
174    })
175  })
176}
177```
178
179## on<sup>9+</sup>
180
181on(type: 'imageRelease', callback: AsyncCallback\<void>): void
182
183监听imageRelease事件,并使用callback返回结果。
184
185**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
186
187**参数:**
188
189| 参数名        | 类型                     | 必填 | 说明                 |
190| ------------- | -------------------------| ---- | -------------------- |
191| type          | string                   | 是   | 监听事件类型,如'imageRelease'。 |
192| callback      | AsyncCallback\<void>     | 是   | 回调函数,当监听事件触发成功,err为undefined,否则为错误对象。  |
193
194**示例:**
195
196```ts
197import { BusinessError } from '@kit.BasicServicesKit';
198
199async function On(creator : image.ImageCreator) {
200  creator.on('imageRelease', (err: BusinessError) => {
201    if (err) {
202      console.error(`Failed to get the imageRelease callback.code ${err.code},message is ${err.message}`);
203    } else {
204      console.info('Succeeded in getting imageRelease callback.');
205    }
206  })
207}
208```
209
210## off<sup>13+</sup>
211
212off(type: 'imageRelease', callback?: AsyncCallback\<void>): void
213
214释放buffer时,移除注册的回调函数。
215
216**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
217
218**参数:**
219
220| 参数名        | 类型                     | 必填 | 说明                                         |
221| ------------- | -------------------------|----|--------------------------------------------|
222| type          | string                   | 是  | 监听事件类型,如'imageRelease'。                    |
223| callback      | AsyncCallback\<void>     | 否  | 将被移除的回调函数。 |
224
225**示例:**
226
227```ts
228async function Off(creator : image.ImageCreator) {
229  let callbackFunc = ()=>{
230      // 实现回调函数逻辑。
231  }
232  creator.on('imageRelease', callbackFunc)
233  creator.off('imageRelease', callbackFunc)
234}
235```
236
237## release<sup>9+</sup>
238
239release(callback: AsyncCallback\<void>): void
240
241释放当前图像,并使用callback返回结果。
242
243ArkTS有内存回收机制,ImageCreator对象不调用release方法,内存最终也会由系统统一释放。但图片使用的内存往往较大,为尽快释放内存,建议应用在使用完成后主动调用release方法提前释放内存。
244
245**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
246
247**参数:**
248
249| 参数名           | 类型                     | 必填 | 说明                 |
250| ------------- | -------------------------| ---- | -------------------- |
251| callback      | AsyncCallback\<void>     | 是   | 回调函数,当图像释放成功,err为undefined,否则为错误对象。 |
252
253**示例:**
254
255```ts
256import { BusinessError } from '@kit.BasicServicesKit';
257
258async function Release(creator : image.ImageCreator) {
259  creator.release((err: BusinessError) => {
260    if (err) {
261      console.error(`Failed to release the creator.code ${err.code},message is ${err.message}`);
262    } else {
263      console.info('Succeeded in releasing creator.');
264    }
265  });
266}
267```
268
269## release<sup>9+</sup>
270
271release(): Promise\<void>
272
273释放当前图像,并使用promise返回结果。
274
275ArkTS有内存回收机制,ImageCreator对象不调用release方法,内存最终也会由系统统一释放。但图片使用的内存往往较大,为尽快释放内存,建议应用在使用完成后主动调用release方法提前释放内存。
276
277**系统能力:** SystemCapability.Multimedia.Image.ImageCreator
278
279**返回值:**
280
281| 类型            | 说明           |
282| -------------- | ------------- |
283| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
284
285**示例:**
286
287```ts
288import { BusinessError } from '@kit.BasicServicesKit';
289
290async function Release(creator : image.ImageCreator) {
291  creator.release().then(() => {
292    console.info('Succeeded in releasing creator.');
293  }).catch((error: BusinessError) => {
294    console.error(`Failed to release the creator.code ${error.code},message is ${error.message}`);
295  })
296}
297```
298