• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.multimedia.sendableImage (基于Sendable对象的图片处理)
2<!--Kit: Image Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @aulight02-->
5<!--Designer: @liyang_bryan-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9本模块基于Sendable对象,提供图片处理效果,包括通过属性创建PixelMap、读取图像像素数据、读取区域内的图片数据等。
10
11> **说明:**
12>
13> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15## 导入模块
16
17```ts
18import { sendableImage } from '@kit.ImageKit';
19```
20
21## sendableImage.createPixelMap
22
23createPixelMap(colors: ArrayBuffer, options: image.InitializationOptions): Promise\<PixelMap>
24
25通过属性创建PixelMap,默认采用BGRA_8888格式处理数据,通过Promise返回结果。
26
27**系统能力:** SystemCapability.Multimedia.Image.Core
28
29**参数:**
30
31| 参数名  | 类型                                             | 必填 | 说明                                                             |
32| ------- | ------------------------------------------------ | ---- | ---------------------------------------------------------------- |
33| colors  | ArrayBuffer                                      | 是   | 默认按照BGRA_8888格式处理的颜色数组。                                        |
34| options | [image.InitializationOptions](arkts-apis-image-i.md#initializationoptions8) | 是   | 创建像素的属性,包括透明度,尺寸,缩略值,像素格式和是否可编辑。 |
35
36**返回值:**
37
38| 类型                             | 说明                                                                    |
39| -------------------------------- | ----------------------------------------------------------------------- |
40| Promise\<[PixelMap](#pixelmap)> | 返回Pixelmap。<br>当创建的pixelmap大小超过原图大小时,返回原图pixelmap大小。|
41
42**示例:**
43
44```ts
45import { sendableImage } from '@kit.ImageKit';
46import { image } from '@kit.ImageKit';
47import { BusinessError } from '@kit.BasicServicesKit';
48
49async function Demo() {
50    const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
51    let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
52    sendableImage.createPixelMap(color, opts).then((pixelMap: sendableImage.PixelMap) => {
53        console.info('Succeeded in creating pixelmap.');
54    }).catch((error: BusinessError) => {
55        console.error(`Failed to create pixelmap. code is ${error.code}, message is ${error.message}`);
56    })
57}
58```
59
60## sendableImage.createPixelMapFromParcel
61
62createPixelMapFromParcel(sequence: rpc.MessageSequence): PixelMap
63
64从MessageSequence中获取PixelMap。
65
66**系统能力:** SystemCapability.Multimedia.Image.Core
67
68**参数:**
69
70| 参数名                 | 类型                                                  | 必填 | 说明                                     |
71| ---------------------- | ----------------------------------------------------- | ---- | ---------------------------------------- |
72| sequence               | [rpc.MessageSequence](../apis-ipc-kit/js-apis-rpc.md#messagesequence9) | 是   | 保存有PixelMap信息的MessageSequence。      |
73
74**返回值:**
75
76| 类型                             | 说明                  |
77| -------------------------------- | --------------------- |
78| [PixelMap](#pixelmap) | 成功同步返回PixelMap对象,失败抛出异常。 |
79
80**错误码:**
81
82以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
83
84| 错误码ID | 错误信息 |
85| ------- | --------------------------------------------|
86| 62980096 | Operation failed|
87| 62980097 | IPC error|
88| 62980115 | Invalid input parameter|
89| 62980105 | Failed to get the data|
90| 62980177 | Abnormal API environment|
91| 62980178 | Failed to create the PixelMap|
92| 62980179 | Abnormal buffer size|
93| 62980180 | FD mapping failed|
94| 62980246 | Failed to read the PixelMap|
95
96**示例:**
97
98```ts
99import { sendableImage } from '@kit.ImageKit';
100import { image } from '@kit.ImageKit';
101import { rpc } from '@kit.IPCKit';
102import { BusinessError } from '@kit.BasicServicesKit';
103
104class MySequence implements rpc.Parcelable {
105  pixel_map: sendableImage.PixelMap;
106  constructor(conPixelmap: sendableImage.PixelMap) {
107    this.pixel_map = conPixelmap;
108  }
109  marshalling(messageSequence: rpc.MessageSequence) {
110    this.pixel_map.marshalling(messageSequence);
111    return true;
112  }
113  unmarshalling(messageSequence: rpc.MessageSequence) {
114    try {
115      this.pixel_map = sendableImage.createPixelMapFromParcel(messageSequence);
116    } catch(e) {
117      let error = e as BusinessError;
118      console.error(`createPixelMapFromParcel error. code is ${error.code}, message is ${error.message}`);
119      return false;
120    }
121    return true;
122  }
123}
124async function Demo() {
125  const color: ArrayBuffer = new ArrayBuffer(96);
126  let bufferArr: Uint8Array = new Uint8Array(color);
127  for (let i = 0; i < bufferArr.length; i++) {
128    bufferArr[i] = 0x80;
129  }
130  let opts: image.InitializationOptions = {
131    editable: true,
132    pixelFormat: 4,
133    size: { height: 4, width: 6 },
134    alphaType: 3
135  }
136  let pixelMap: sendableImage.PixelMap | undefined = undefined;
137  await sendableImage.createPixelMap(color, opts).then((srcPixelMap: sendableImage.PixelMap) => {
138    pixelMap = srcPixelMap;
139  })
140  if (pixelMap != undefined) {
141    // 序列化。
142    let parcelable: MySequence = new MySequence(pixelMap);
143    let data: rpc.MessageSequence = rpc.MessageSequence.create();
144    data.writeParcelable(parcelable);
145
146    // 反序列化rpc获取到data。
147    let ret: MySequence = new MySequence(pixelMap);
148    data.readParcelable(ret);
149
150    // 获取到pixelmap。
151    let unmarshPixelmap = ret.pixel_map;
152  }
153}
154```
155
156## sendableImage.createPixelMapFromSurface
157
158createPixelMapFromSurface(surfaceId: string, region: image.Region): Promise\<PixelMap>
159
160根据Surface ID和区域信息创建一个PixelMap对象。该区域的大小由[Region](arkts-apis-image-i.md#region8).size指定。使用Promise形式返回。
161
162**系统能力:** SystemCapability.Multimedia.Image.Core
163
164**参数:**
165
166| 参数名                 | 类型                 | 必填 | 说明                                     |
167| ---------------------- | -------------       | ---- | ---------------------------------------- |
168| surfaceId              | string              | 是   | 对应Surface的ID,可通过预览组件获取,如[XComponent](../apis-arkui/arkui-ts/ts-basic-components-xcomponent.md)组件。 |
169| region                 | [image.Region](arkts-apis-image-i.md#region8)  | 是   | 截取的画面区域。仅支持从画面左上角开始截取部分或整个画面,即Region中的x和y必须为0,Region.size中width和height的取值范围分别为[1, 预览流宽度]和[1, 预览流高度]。如需截取任意区域,可先获取整个画面,再使用[crop](#crop)截取所需区域。 |
170
171**返回值:**
172| 类型                             | 说明                  |
173| -------------------------------- | --------------------- |
174| Promise\<[PixelMap](#pixelmap)> | 成功同步返回PixelMap对象,失败抛出异常。 |
175
176**错误码:**
177
178以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
179
180| 错误码ID | 错误信息 |
181| ------- | --------------------------------------------|
182| 62980115 | If the image parameter invalid.|
183| 62980105 | Failed to get the data|
184| 62980178 | Failed to create the PixelMap|
185
186**示例:**
187
188```ts
189import { sendableImage } from '@kit.ImageKit';
190import { image } from '@kit.ImageKit';
191import { BusinessError } from '@kit.BasicServicesKit';
192
193async function Demo(surfaceId: string) {
194  let region: image.Region = { x: 0, y: 0, size: { height: 100, width: 100 } };
195  sendableImage.createPixelMapFromSurface(surfaceId, region).then(() => {
196    console.info('Succeeded in creating pixelmap from Surface');
197  }).catch((error: BusinessError) => {
198    console.error(`Failed to create pixelmap. code is ${error.code}, message is ${error.message}`);
199  });
200}
201```
202
203## sendableImage.createPixelMapSync
204
205createPixelMapSync(colors: ArrayBuffer, options: image.InitializationOptions): PixelMap
206
207通过属性创建PixelMap,同步返回PixelMap结果。
208
209**系统能力:** SystemCapability.Multimedia.Image.Core
210
211**参数:**
212
213| 参数名  | 类型                                             | 必填 | 说明                                                             |
214| ------- | ------------------------------------------------ | ---- | ---------------------------------------------------------------- |
215| colors  | ArrayBuffer                                      | 是   | BGRA_8888格式的颜色数组。                                        |
216| options | [image.InitializationOptions](arkts-apis-image-i.md#initializationoptions8) | 是   | 创建像素的属性,包括透明度,尺寸,缩略值,像素格式和是否可编辑。 |
217
218**返回值:**
219| 类型                             | 说明                  |
220| -------------------------------- | --------------------- |
221| [PixelMap](#pixelmap) | 成功同步返回PixelMap对象,失败抛出异常。 |
222
223**错误码:**
224
225以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)。
226
227| 错误码ID | 错误信息 |
228| ------- | --------------------------------------------|
229|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.|
230
231**示例:**
232
233```ts
234import { sendableImage } from '@kit.ImageKit';
235import { image } from '@kit.ImageKit';
236import { BusinessError } from '@kit.BasicServicesKit';
237
238async function Demo() {
239    const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
240    let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
241    let pixelMap : sendableImage.PixelMap = sendableImage.createPixelMapSync(color, opts);
242    return pixelMap;
243}
244```
245
246## sendableImage.convertFromPixelMap
247
248convertFromPixelMap(pixelmap: image.PixelMap): PixelMap
249
250通过image下的PixelMap创建出一个sendableImage下的PixelMap,同步返回PixelMap结果。原PixelMap的方法均不可再调用。
251
252**系统能力:** SystemCapability.Multimedia.Image.Core
253
254**参数:**
255
256| 参数名  | 类型                                             | 必填 | 说明                                                             |
257| ------- | ------------------------------------------------ | ---- | ---------------------------------------------------------------- |
258| pixelmap | [image.PixelMap](arkts-apis-image-PixelMap.md) | 是   | image下的非sendable的PixelMap。 |
259
260**返回值:**
261| 类型                             | 说明                  |
262| -------------------------------- | --------------------- |
263| [PixelMap](#pixelmap) | 成功同步返回sendable的PixelMap对象,失败抛出异常。 |
264
265**错误码:**
266
267以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
268
269| 错误码ID | 错误信息 |
270| ------- | --------------------------------------------|
271|  401    | If the image parameter invalid. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.|
272| 62980104 | Failed to initialize the internal object.|
273
274**示例:**
275
276```ts
277import { sendableImage } from '@kit.ImageKit';
278import { image } from '@kit.ImageKit';
279
280async function Demo() {
281  const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
282  let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
283  let pixelMap : image.PixelMap = image.createPixelMapSync(color, opts);
284  let sendablePixelMap : sendableImage.PixelMap = sendableImage.convertFromPixelMap(pixelMap);
285  return sendablePixelMap;
286}
287```
288
289## sendableImage.convertToPixelMap
290
291convertToPixelMap(pixelmap: PixelMap): image.PixelMap
292
293通过sendableImage下的PixelMap创建出一个image下的PixelMap,同步返回PixelMap结果。原PixelMap的方法均不可再调用。
294
295**系统能力:** SystemCapability.Multimedia.Image.Core
296
297**参数:**
298
299| 参数名  | 类型                                             | 必填 | 说明                                                             |
300| ------- | ------------------------------------------------ | ---- | ---------------------------------------------------------------- |
301| pixelmap | [PixelMap](#pixelmap) | 是   | sendableImage下的PixelMap。 |
302
303**返回值:**
304| 类型                             | 说明                  |
305| -------------------------------- | --------------------- |
306| [image.PixelMap](arkts-apis-image-PixelMap.md) | 成功同步返回image下的非sendable的PixelMap对象,失败抛出异常。 |
307
308**错误码:**
309
310以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
311
312| 错误码ID | 错误信息 |
313| ------- | --------------------------------------------|
314|  401    | If the image parameter invalid. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.|
315| 62980104 | Failed to initialize the internal object.|
316
317**示例:**
318
319```ts
320import { sendableImage } from '@kit.ImageKit';
321import { image } from '@kit.ImageKit';
322
323async function Demo() {
324  const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
325  let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
326  let sendablePixelMap : sendableImage.PixelMap = sendableImage.createPixelMapSync(color, opts);
327  let pixelMap : image.PixelMap = sendableImage.convertToPixelMap(sendablePixelMap);
328  return pixelMap;
329}
330```
331
332## ISendable
333type ISendable = lang.ISendable
334
335ISendable是所有Sendable类型(除null和undefined)的父类型。自身没有任何必须的方法和属性。
336
337**系统能力:** SystemCapability.Multimedia.Image.Core
338
339| 类型                | 说明                     |
340| ------------------ | ------------------------ |
341| [lang.ISendable](../apis-arkts/js-apis-arkts-lang.md#langisendable)  | 所有Sendable类型的父类型。               |
342
343## PixelMap
344
345图像像素类,用于读取或写入图像数据以及获取图像信息。在调用PixelMap的方法前,需要先通过[createPixelMap](#sendableimagecreatepixelmap)创建一个PixelMap实例。目前pixelmap序列化大小最大128MB,超过会送显失败。大小计算方式为(宽\*高\*每像素占用字节数)。
346
347sendableImage下的PixelMap支持sendable属性,支持worker线程共享。sendableImage下的PixelMap,可以利用[Convert](#sendableimageconverttopixelmap)方法与image下的PixelMap进行互相转换。转换后,原对象的方法均不允许再调用,否则将报错501 无法调用接口。跨线程处理PixelMap时,需要考虑多线程问题。
348
349在调用PixelMap的方法前,需要先通过[sendableImage.createPixelMap](#sendableimagecreatepixelmap)构建一个PixelMap对象。
350
351### 属性
352
353**系统能力:** SystemCapability.Multimedia.Image.Core
354
355| 名称              | 类型    | 只读 | 可选 | 说明                       |
356| -----------------| ------- | ---- | ---- | -------------------------- |
357| isEditable        | boolean | 是   | 否   | true表示图像像素可被编辑,false表示不可被编辑。 <br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
358| isStrideAlignment | boolean | 是   | 否   | true表示图像内存为DMA内存,false表示非DMA内存。DMA内存的PixelMap会做256字节内存对齐,行末会存在padding区域。 |
359
360### readPixelsToBuffer
361
362readPixelsToBuffer(dst: ArrayBuffer): Promise\<void>
363
364读取图像像素数据,结果写入ArrayBuffer里,使用Promise形式返回。指定BGRA_8888格式创建pixelmap,读取的像素数据与原数据保持一致。
365
366**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
367
368**系统能力:** SystemCapability.Multimedia.Image.Core
369
370**参数:**
371
372| 参数名 | 类型        | 必填 | 说明                                                                                                  |
373| ------ | ----------- | ---- | ----------------------------------------------------------------------------------------------------- |
374| dst    | ArrayBuffer | 是   | 缓冲区,函数执行结束后获取的图像像素数据写入到该内存区域内。缓冲区大小由[getPixelBytesNumber](#getpixelbytesnumber)接口获取。 |
375
376**返回值:**
377
378| 类型           | 说明                                            |
379| -------------- | ----------------------------------------------- |
380| Promise\<void> | Promise实例,用于获取结果,失败时返回错误信息。 |
381
382**示例:**
383
384```ts
385import { BusinessError } from '@kit.BasicServicesKit';
386import { sendableImage } from '@kit.ImageKit';
387
388async function Demo(pixelMap : sendableImage.PixelMap) {
389  const readBuffer: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
390  if (pixelMap != undefined) {
391    pixelMap.readPixelsToBuffer(readBuffer).then(() => {
392      console.info('Succeeded in reading image pixel data.'); // 符合条件则进入。
393    }).catch((error: BusinessError) => {
394      console.error(`Failed to read image pixel data. code is ${error.code}, message is ${error.message}`);// 不符合条件则进入。
395    })
396  }
397}
398```
399
400### readPixelsToBufferSync
401
402readPixelsToBufferSync(dst: ArrayBuffer): void
403
404以同步方法读取PixelMap到Buffer里。
405
406**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
407
408**系统能力:** SystemCapability.Multimedia.Image.Core
409
410**参数:**
411
412| 参数名   | 类型                 | 必填 | 说明                                                                                                  |
413| -------- | -------------------- | ---- | ----------------------------------------------------------------------------------------------------- |
414| dst      | ArrayBuffer          | 是   | 缓冲区,函数执行结束后获取的图像像素数据写入到该内存区域内。缓冲区大小由[getPixelBytesNumber](#getpixelbytesnumber)接口获取。 |
415
416**错误码:**
417
418以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
419
420| 错误码ID | 错误信息 |
421| ------- | --------------------------------------------|
422|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
423|  501    | Resource Unavailable. |
424
425**示例:**
426
427```ts
428import { sendableImage } from '@kit.ImageKit';
429
430async function Demo(pixelMap: sendableImage.PixelMap) {
431  const bufferSize = pixelMap.getPixelBytesNumber();
432  const readBuffer: ArrayBuffer = new ArrayBuffer(bufferSize);
433  if (pixelMap != undefined) {
434    pixelMap.readPixelsToBufferSync(readBuffer);
435  }
436}
437```
438
439### readPixels
440
441readPixels(area: image.PositionArea): Promise\<void>
442
443读取区域内的图片数据,使用Promise形式返回。
444
445**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
446
447**系统能力:** SystemCapability.Multimedia.Image.Core
448
449**参数:**
450
451| 参数名 | 类型                           | 必填 | 说明                     |
452| ------ | ------------------------------ | ---- | ------------------------ |
453| area   | [image.PositionArea](arkts-apis-image-i.md#positionarea7) | 是   | 区域大小,根据区域读取。 |
454
455**返回值:**
456
457| 类型           | 说明                                                |
458| :------------- | :-------------------------------------------------- |
459| Promise\<void> | Promise实例,用于获取读取结果,失败时返回错误信息。 |
460
461**示例:**
462
463```ts
464import { sendableImage } from '@kit.ImageKit';
465import { image } from '@kit.ImageKit';
466import { BusinessError } from '@kit.BasicServicesKit';
467
468async function Demo(pixelMap : sendableImage.PixelMap) {
469  const area: image.PositionArea = {
470    pixels: new ArrayBuffer(8),
471    offset: 0,
472    stride: 8,
473    region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
474  };
475  if (pixelMap != undefined) {
476    pixelMap.readPixels(area).then(() => {
477      console.info('Succeeded in reading the image data in the area.'); // 符合条件则进入。
478    }).catch((error: BusinessError) => {
479      console.error(`Failed to read the image data in the area. code is ${error.code}, message is ${error.message}`);// 不符合条件则进入。
480    })
481  }
482}
483```
484
485### readPixelsSync
486
487readPixelsSync(area: image.PositionArea): void
488
489读取区域内的图片数据并同步返回结果。
490
491**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
492
493**系统能力:** SystemCapability.Multimedia.Image.Core
494
495**参数:**
496
497| 参数名 | 类型                           | 必填 | 说明                     |
498| ------ | ------------------------------ | ---- | ------------------------ |
499| area   | [image.PositionArea](arkts-apis-image-i.md#positionarea7) | 是   | 区域大小,根据区域读取。 |
500
501**错误码:**
502
503以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
504
505| 错误码ID | 错误信息 |
506| ------- | --------------------------------------------|
507|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
508|  501    | Resource Unavailable. |
509
510**示例:**
511
512```ts
513import { sendableImage } from '@kit.ImageKit';
514import { image } from '@kit.ImageKit';
515
516async function Demo(pixelMap : sendableImage.PixelMap) {
517  const area : image.PositionArea = {
518    pixels: new ArrayBuffer(8),
519    offset: 0,
520    stride: 8,
521    region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
522  };
523  if (pixelMap != undefined) {
524    pixelMap.readPixelsSync(area);
525  }
526}
527```
528
529### writePixels
530
531writePixels(area: image.PositionArea): Promise\<void>
532
533将PixelMap写入指定区域内,使用Promise形式返回写入结果。
534
535**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
536
537**系统能力:** SystemCapability.Multimedia.Image.Core
538
539**参数:**
540
541| 参数名 | 类型                           | 必填 | 说明                 |
542| ------ | ------------------------------ | ---- | -------------------- |
543| area   | [image.PositionArea](arkts-apis-image-i.md#positionarea7) | 是   | 区域,根据区域写入。 |
544
545**返回值:**
546
547| 类型           | 说明                                                |
548| :------------- | :-------------------------------------------------- |
549| Promise\<void> | Promise实例,用于获取写入结果,失败时返回错误信息。 |
550
551**示例:**
552
553```ts
554import { sendableImage } from '@kit.ImageKit';
555import { image } from '@kit.ImageKit';
556import { BusinessError } from '@kit.BasicServicesKit';
557
558async function Demo(pixelMap : sendableImage.PixelMap) {
559  const area: image.PositionArea = {
560    pixels: new ArrayBuffer(8),
561    offset: 0,
562    stride: 8,
563    region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
564  };
565  let bufferArr: Uint8Array = new Uint8Array(area.pixels);
566  for (let i = 0; i < bufferArr.length; i++) {
567    bufferArr[i] = i + 1;
568  }
569  if (pixelMap != undefined) {
570    pixelMap.writePixels(area).then(() => {
571      console.info('Succeeded to write pixelmap into the specified area.');
572    }).catch((error: BusinessError) => {
573      console.error(`Failed to write pixelmap into the specified area. code is ${error.code}, message is ${error.message}`);
574    })
575  }
576}
577```
578
579### writePixelsSync
580
581writePixelsSync(area: image.PositionArea): void
582
583以同步方法将PixelMap写入指定区域内。
584
585**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
586
587**系统能力:** SystemCapability.Multimedia.Image.Core
588
589**参数:**
590
591| 参数名 | 类型                           | 必填 | 说明                 |
592| ------ | ------------------------------ | ---- | -------------------- |
593| area   | [image.PositionArea](arkts-apis-image-i.md#positionarea7) | 是   | 区域,根据区域写入。 |
594
595**错误码:**
596
597以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
598
599| 错误码ID | 错误信息 |
600| ------- | --------------------------------------------|
601|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
602|  501    | Resource Unavailable. |
603
604**示例:**
605
606```ts
607import { sendableImage } from '@kit.ImageKit';
608import { image } from '@kit.ImageKit';
609
610async function Demo(pixelMap : sendableImage.PixelMap) {
611  const area: image.PositionArea = {
612    pixels: new ArrayBuffer(8),
613    offset: 0,
614    stride: 8,
615    region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
616  };
617  let bufferArr: Uint8Array = new Uint8Array(area.pixels);
618  for (let i = 0; i < bufferArr.length; i++) {
619    bufferArr[i] = i + 1;
620  }
621  if (pixelMap != undefined) {
622    pixelMap.writePixelsSync(area);
623  }
624}
625```
626
627### writeBufferToPixels
628
629writeBufferToPixels(src: ArrayBuffer): Promise\<void>
630
631读取缓冲区中的图片数据,结果写入PixelMap中,使用Promise形式返回。
632
633**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
634
635**系统能力:** SystemCapability.Multimedia.Image.Core
636
637**参数:**
638
639| 参数名 | 类型        | 必填 | 说明           |
640| ------ | ----------- | ---- | -------------- |
641| src    | ArrayBuffer | 是   | 图像像素数据。 |
642
643**返回值:**
644
645| 类型           | 说明                                            |
646| -------------- | ----------------------------------------------- |
647| Promise\<void> | Promise实例,用于获取结果,失败时返回错误信息。 |
648
649**示例:**
650
651```ts
652import { sendableImage } from '@kit.ImageKit';
653import { BusinessError } from '@kit.BasicServicesKit';
654
655async function Demo(pixelMap : sendableImage.PixelMap) {
656  const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
657  let bufferArr: Uint8Array = new Uint8Array(color);
658  for (let i = 0; i < bufferArr.length; i++) {
659    bufferArr[i] = i + 1;
660  }
661  if (pixelMap != undefined) {
662    pixelMap.writeBufferToPixels(color).then(() => {
663      console.info("Succeeded in writing data from a buffer to a PixelMap.");
664    }).catch((error: BusinessError) => {
665      console.error(`Failed to write data from a buffer to a PixelMap. code is ${error.code}, message is ${error.message}`);
666    })
667  }
668}
669```
670
671### writeBufferToPixelsSync
672
673writeBufferToPixelsSync(src: ArrayBuffer): void
674
675读取缓冲区中的图片数据,结果写入PixelMap并同步返回结果。
676
677**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
678
679**系统能力:** SystemCapability.Multimedia.Image.Core
680
681**参数:**
682
683| 参数名 | 类型        | 必填 | 说明           |
684| ------ | ----------- | ---- | -------------- |
685| src    | ArrayBuffer | 是   | 图像像素数据。 |
686
687**错误码:**
688
689以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
690
691| 错误码ID | 错误信息 |
692| ------- | --------------------------------------------|
693|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
694|  501    | Resource Unavailable. |
695
696**示例:**
697
698```ts
699import { sendableImage } from '@kit.ImageKit';
700
701async function Demo(pixelMap: sendableImage.PixelMap) {
702  const bufferSize = pixelMap.getPixelBytesNumber();
703  const color : ArrayBuffer = new ArrayBuffer(bufferSize);
704  let bufferArr : Uint8Array = new Uint8Array(color);
705  for (let i = 0; i < bufferArr.length; i++) {
706    bufferArr[i] = i + 1;
707  }
708  if (pixelMap != undefined) {
709    pixelMap.writeBufferToPixelsSync(color);
710  }
711}
712```
713
714### getImageInfo
715
716getImageInfo(): Promise\<image.ImageInfo>
717
718获取图像像素信息,使用Promise形式返回获取的图像像素信息。
719
720**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
721
722**系统能力:** SystemCapability.Multimedia.Image.Core
723
724**返回值:**
725
726| 类型                              | 说明                                                        |
727| --------------------------------- | ----------------------------------------------------------- |
728| Promise\<[image.ImageInfo](arkts-apis-image-i.md#imageinfo)> | Promise实例,用于异步获取图像像素信息,失败时返回错误信息。 |
729
730**示例:**
731
732```ts
733import { sendableImage } from '@kit.ImageKit';
734import { image } from '@kit.ImageKit';
735import { BusinessError } from '@kit.BasicServicesKit';
736
737async function Demo(pixelMap : sendableImage.PixelMap) {
738  if (pixelMap != undefined) {
739    pixelMap.getImageInfo().then((imageInfo: image.ImageInfo) => {
740      if (imageInfo != undefined) {
741        console.info("Succeeded in obtaining the image pixel map information."+ imageInfo.size.height);
742      }
743    }).catch((error: BusinessError) => {
744      console.error(`Failed to obtain the image pixel map information. code is ${error.code}, message is ${error.message}`);
745    })
746  }
747}
748```
749
750### getImageInfoSync
751
752getImageInfoSync(): image.ImageInfo
753
754以同步方法获取图像像素信息。
755
756**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
757
758**系统能力:** SystemCapability.Multimedia.Image.ImageSource
759
760**返回值:**
761
762| 类型                              | 说明                                                        |
763| --------------------------------- | ----------------------------------------------------------- |
764| [image.ImageInfo](arkts-apis-image-i.md#imageinfo)           | 图像像素信息。                                                |
765
766**错误码:**
767
768以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
769
770| 错误码ID | 错误信息 |
771| ------- | --------------------------------------------|
772|  501    | Resource Unavailable |
773
774**示例:**
775
776```ts
777import { image } from '@kit.ImageKit';
778import { sendableImage } from '@kit.ImageKit';
779
780async function Demo(pixelMap : sendableImage.PixelMap) {
781  if (pixelMap != undefined) {
782    let imageInfo : image.ImageInfo = pixelMap.getImageInfoSync();
783  }
784}
785```
786
787### getBytesNumberPerRow
788
789getBytesNumberPerRow(): number
790
791获取图像像素每行字节数。
792
793**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
794
795**系统能力:** SystemCapability.Multimedia.Image.Core
796
797**返回值:**
798
799| 类型   | 说明                 |
800| ------ | -------------------- |
801| number | 图像像素的行字节数。 |
802
803**示例:**
804
805```ts
806import { sendableImage } from '@kit.ImageKit';
807
808async function Demo(pixelMap : sendableImage.PixelMap) {
809  let rowCount: number = pixelMap.getBytesNumberPerRow();
810}
811```
812
813### getPixelBytesNumber
814
815getPixelBytesNumber(): number
816
817获取图像像素的总字节数。
818
819**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
820
821**系统能力:** SystemCapability.Multimedia.Image.Core
822
823**返回值:**
824
825| 类型   | 说明                 |
826| ------ | -------------------- |
827| number | 图像像素的总字节数。 |
828
829**示例:**
830
831```ts
832import { sendableImage } from '@kit.ImageKit';
833
834async function Demo(pixelMap : sendableImage.PixelMap) {
835  let pixelBytesNumber: number = pixelMap.getPixelBytesNumber();
836}
837```
838
839### getDensity
840
841getDensity():number
842
843获取当前图像像素的密度。
844
845**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
846
847**系统能力:** SystemCapability.Multimedia.Image.Core
848
849**返回值:**
850
851| 类型   | 说明            |
852| ------ | --------------- |
853| number | 图像像素的密度,单位为ppi。|
854
855**示例:**
856
857```ts
858import { sendableImage } from '@kit.ImageKit';
859
860async function Demo(pixelMap : sendableImage.PixelMap) {
861  let getDensity: number = pixelMap.getDensity();
862}
863```
864
865### opacity
866
867opacity(rate: number): Promise\<void>
868
869通过设置透明比率来让PixelMap达到对应的透明效果,使用Promise形式返回。
870
871**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
872
873**系统能力:** SystemCapability.Multimedia.Image.Core
874
875**参数:**
876
877| 参数名 | 类型   | 必填 | 说明                        |
878| ------ | ------ | ---- | --------------------------- |
879| rate   | number | 是   | 透明比率的值,取值范围是(0,1]。|
880
881**返回值:**
882
883| 类型           | 说明                                            |
884| -------------- | ----------------------------------------------- |
885| Promise\<void> | Promise实例,用于获取结果,失败时返回错误信息。 |
886
887**示例:**
888
889```ts
890import { sendableImage } from '@kit.ImageKit';
891import { BusinessError } from '@kit.BasicServicesKit';
892
893async function Demo(pixelMap : sendableImage.PixelMap) {
894  let rate: number = 0.5;
895  if (pixelMap != undefined) {
896    pixelMap.opacity(rate).then(() => {
897      console.info('Succeeded in setting opacity.');
898    }).catch((err: BusinessError) => {
899      console.error(`Failed to set opacity. code is ${err.code}, message is ${err.message}`);
900    })
901  }
902}
903```
904
905### opacitySync
906
907opacitySync(rate: number): void
908
909设置PixelMap的透明比率,初始化PixelMap。
910
911**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
912
913**系统能力:** SystemCapability.Multimedia.Image.Core
914
915**参数:**
916
917| 参数名   | 类型                 | 必填 | 说明                           |
918| -------- | -------------------- | ---- | ------------------------------ |
919| rate     | number               | 是   | 透明比率的值,取值范围是(0,1]。   |
920
921**错误码:**
922
923以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
924
925| 错误码ID | 错误信息 |
926| ------- | --------------------------------------------|
927|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
928|  501    | Resource Unavailable. |
929
930**示例:**
931
932```ts
933import { sendableImage } from '@kit.ImageKit';
934
935async function Demo(pixelMap : sendableImage.PixelMap) {
936  let rate : number = 0.5;
937  if (pixelMap != undefined) {
938    pixelMap.opacitySync(rate);
939  }
940}
941```
942
943### createAlphaPixelmap
944
945createAlphaPixelmap(): Promise\<PixelMap>
946
947根据Alpha通道的信息,来生成一个仅包含Alpha通道信息的PixelMap,可用于阴影效果,使用Promise形式返回。
948
949**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
950
951**系统能力:** SystemCapability.Multimedia.Image.Core
952
953**返回值:**
954
955| 类型                             | 说明                        |
956| -------------------------------- | --------------------------- |
957| Promise\<[PixelMap](#pixelmap)> | Promise实例,返回pixelmap。 |
958
959**示例:**
960
961```ts
962import { sendableImage } from '@kit.ImageKit';
963import { BusinessError } from '@kit.BasicServicesKit';
964
965async function Demo(pixelMap : sendableImage.PixelMap) {
966  if (pixelMap != undefined) {
967    pixelMap.createAlphaPixelmap().then((alphaPixelMap: sendableImage.PixelMap) => {
968      console.info('Succeeded in creating alpha pixelmap.');
969    }).catch((error: BusinessError) => {
970      console.error(`Failed to create alpha pixelmap. code is ${error.code}, message is ${error.message}`);
971    })
972  }
973}
974```
975
976### createAlphaPixelmapSync
977
978createAlphaPixelmapSync(): PixelMap
979
980根据Alpha通道的信息,生成一个仅包含Alpha通道信息的PixelMap,可用于阴影效果,同步返回PixelMap类型的结果。
981
982**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
983
984**系统能力:** SystemCapability.Multimedia.Image.Core
985
986**返回值:**
987
988| 类型                             | 说明                  |
989| -------------------------------- | --------------------- |
990| [PixelMap](#pixelmap) | 成功同步返回PixelMap对象,失败抛出异常。 |
991
992**错误码:**
993
994以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
995
996| 错误码ID | 错误信息 |
997| ------- | --------------------------------------------|
998|  401    | Parameter error. Possible causes: 1.Parameter verification failed. |
999|  501    | Resource Unavailable. |
1000
1001**示例:**
1002
1003```ts
1004import { sendableImage } from '@kit.ImageKit';
1005
1006async function Demo(pixelMap : sendableImage.PixelMap) {
1007  let resPixelMap : sendableImage.PixelMap = pixelMap.createAlphaPixelmapSync();
1008  return resPixelMap;
1009}
1010```
1011
1012### scale
1013
1014scale(x: number, y: number): Promise\<void>
1015
1016根据输入的宽高对图片进行缩放,使用Promise形式返回。
1017
1018**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1019
1020**系统能力:** SystemCapability.Multimedia.Image.Core
1021
1022**参数:**
1023
1024| 参数名 | 类型   | 必填 | 说明                            |
1025| ------ | ------ | ---- | ------------------------------- |
1026| x      | number | 是   | 宽度的缩放倍数。|
1027| y      | number | 是   | 高度的缩放倍数。|
1028
1029**返回值:**
1030
1031| 类型           | 说明                        |
1032| -------------- | --------------------------- |
1033| Promise\<void> | Promise实例,异步返回结果。 |
1034
1035**示例:**
1036
1037```ts
1038import { sendableImage } from '@kit.ImageKit';
1039import { BusinessError } from '@kit.BasicServicesKit';
1040
1041async function Demo(pixelMap : sendableImage.PixelMap) {
1042  let scaleX: number = 2.0;
1043  let scaleY: number = 1.0;
1044  if (pixelMap != undefined) {
1045    pixelMap.scale(scaleX, scaleY).then(() => {
1046      console.info('Succeeded in scaling pixelmap.');
1047    }).catch((err: BusinessError) => {
1048      console.error(`Failed to scale pixelmap. code is ${err.code}, message is ${err.message}`);
1049
1050    })
1051  }
1052}
1053```
1054
1055### scaleSync
1056
1057scaleSync(x: number, y: number): void
1058
1059以同步方法根据输入的宽高对图片进行缩放。
1060
1061**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1062
1063**系统能力:** SystemCapability.Multimedia.Image.Core
1064
1065**参数:**
1066
1067| 参数名 | 类型   | 必填 | 说明                            |
1068| ------ | ------ | ---- | ------------------------------- |
1069| x      | number | 是   | 宽度的缩放倍数。|
1070| y      | number | 是   | 高度的缩放倍数。|
1071
1072**错误码:**
1073
1074以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1075
1076| 错误码ID | 错误信息 |
1077| ------- | --------------------------------------------|
1078|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1079|  501    | Resource Unavailable. |
1080
1081**示例:**
1082
1083```ts
1084import { sendableImage } from '@kit.ImageKit';
1085
1086async function Demo(pixelMap : sendableImage.PixelMap) {
1087  let scaleX: number = 2.0;
1088  let scaleY: number = 1.0;
1089  if (pixelMap != undefined) {
1090    pixelMap.scaleSync(scaleX, scaleY);
1091  }
1092}
1093```
1094
1095### translate
1096
1097translate(x: number, y: number): Promise\<void>
1098
1099根据输入的坐标对图片进行位置变换,使用Promise形式返回。
1100
1101translate后的图片尺寸改变为:width+X,height+Y,建议translate后的图片尺寸宽高不超过屏幕的宽高。
1102
1103**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1104
1105**系统能力:** SystemCapability.Multimedia.Image.Core
1106
1107**参数:**
1108
1109| 参数名 | 类型   | 必填 | 说明        |
1110| ------ | ------ | ---- | ----------- |
1111| x      | number | 是   | 区域横坐标。单位:像素。|
1112| y      | number | 是   | 区域纵坐标。单位:像素。|
1113
1114**返回值:**
1115
1116| 类型           | 说明                        |
1117| -------------- | --------------------------- |
1118| Promise\<void> | Promise实例,异步返回结果。 |
1119
1120**示例:**
1121
1122```ts
1123import { sendableImage } from '@kit.ImageKit';
1124import { BusinessError } from '@kit.BasicServicesKit';
1125
1126async function Demo(pixelMap : sendableImage.PixelMap) {
1127  let translateX: number = 50.0;
1128  let translateY: number = 10.0;
1129  if (pixelMap != undefined) {
1130    pixelMap.translate(translateX, translateY).then(() => {
1131      console.info('Succeeded in translating pixelmap.');
1132    }).catch((err: BusinessError) => {
1133      console.error(`Failed to translate pixelmap. code is ${err.code}, message is ${err.message}`);
1134    })
1135  }
1136}
1137```
1138
1139### translateSync
1140
1141translateSync(x: number, y: number): void
1142
1143根据输入的坐标对图片进行位置变换并同步返回结果。
1144
1145translate后的图片尺寸改变为:width+X,height+Y,建议translate后的图片尺寸宽高不超过屏幕的宽高。
1146
1147**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1148
1149**系统能力:** SystemCapability.Multimedia.Image.Core
1150
1151**参数:**
1152
1153| 参数名   | 类型                 | 必填 | 说明                            |
1154| -------- | -------------------- | ---- | ------------------------------- |
1155| x        | number               | 是   | 宽度的缩放倍数。|
1156| y        | number               | 是   | 高度的缩放倍数。|
1157
1158**错误码:**
1159
1160以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1161
1162| 错误码ID | 错误信息 |
1163| ------- | --------------------------------------------|
1164|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1165|  501    | Resource Unavailable. |
1166
1167**示例:**
1168
1169```ts
1170import { sendableImage } from '@kit.ImageKit';
1171
1172async function Demo(pixelMap : sendableImage.PixelMap) {
1173  let translateX : number = 50.0;
1174  let translateY : number = 10.0;
1175  if (pixelMap != undefined) {
1176    pixelMap.translateSync(translateX, translateY);
1177  }
1178}
1179```
1180
1181### rotate
1182
1183rotate(angle: number): Promise\<void>
1184
1185根据输入的角度对图片进行旋转,使用Promise形式返回。
1186
1187> **说明:**
1188>
1189> - 图片旋转的角度取值范围:[0, 360]。超出取值范围时,根据圆周360度自动矫正。例如,-100度与260度效果相同。
1190> - 如果图片旋转的角度不是90的整数倍,旋转后图片的尺寸会发生改变。
1191
1192**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1193
1194**系统能力:** SystemCapability.Multimedia.Image.Core
1195
1196**参数:**
1197
1198| 参数名 | 类型   | 必填 | 说明                          |
1199| ------ | ------ | ---- | ----------------------------- |
1200| angle  | number | 是   | 图片旋转的角度。              |
1201
1202**返回值:**
1203
1204| 类型           | 说明                        |
1205| -------------- | --------------------------- |
1206| Promise\<void> | Promise实例,异步返回结果。 |
1207
1208**示例:**
1209
1210```ts
1211import { sendableImage } from '@kit.ImageKit';
1212import { BusinessError } from '@kit.BasicServicesKit';
1213
1214async function Demo(pixelMap : sendableImage.PixelMap) {
1215  let angle: number = 90.0;
1216  if (pixelMap != undefined) {
1217    pixelMap.rotate(angle).then(() => {
1218      console.info('Succeeded in rotating pixelmap.');
1219    }).catch((err: BusinessError) => {
1220      console.error(`Failed to rotate pixelmap. code is ${err.code}, message is ${err.message}`);
1221    })
1222  }
1223}
1224```
1225
1226### rotateSync
1227
1228rotateSync(angle: number): void
1229
1230根据输入的角度对图片进行旋转并同步返回结果。
1231
1232> **说明:**
1233>
1234> - 图片旋转的角度取值范围:[0, 360]。超出取值范围时,根据圆周360度自动矫正。例如,-100度与260度效果相同。
1235> - 如果图片旋转的角度不是90的整数倍,旋转后图片的尺寸会发生改变。
1236
1237**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1238
1239**系统能力:** SystemCapability.Multimedia.Image.Core
1240
1241**参数:**
1242
1243| 参数名   | 类型                 | 必填 | 说明                          |
1244| -------- | -------------------- | ---- | ----------------------------- |
1245| angle    | number               | 是   | 图片旋转的角度。              |
1246
1247**错误码:**
1248
1249以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1250
1251| 错误码ID | 错误信息 |
1252| ------- | --------------------------------------------|
1253|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1254|  501    | Resource Unavailable. |
1255
1256**示例:**
1257
1258```ts
1259import { sendableImage } from '@kit.ImageKit';
1260
1261async function Demo(pixelMap : sendableImage.PixelMap) {
1262  let angle : number = 90.0;
1263  if (pixelMap != undefined) {
1264    pixelMap.rotateSync(angle);
1265  }
1266}
1267```
1268
1269### flip
1270
1271flip(horizontal: boolean, vertical: boolean): Promise\<void>
1272
1273根据输入的条件对图片进行翻转,使用Promise形式返回。
1274
1275**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1276
1277**系统能力:** SystemCapability.Multimedia.Image.Core
1278
1279**参数:**
1280
1281| 参数名     | 类型    | 必填 | 说明      |
1282| ---------- | ------- | ---- | --------- |
1283| horizontal | boolean              | 是   | true表示进行水平翻转,false表示不进行水平翻转。            |
1284| vertical   | boolean              | 是   | true表示进行垂直翻转,false表示不进行垂直翻转。            |
1285
1286**返回值:**
1287
1288| 类型           | 说明                        |
1289| -------------- | --------------------------- |
1290| Promise\<void> | Promise实例,异步返回结果。 |
1291
1292**示例:**
1293
1294```ts
1295import { sendableImage } from '@kit.ImageKit';
1296import { BusinessError } from '@kit.BasicServicesKit';
1297
1298async function Demo(pixelMap : sendableImage.PixelMap) {
1299  let horizontal: boolean = true;
1300  let vertical: boolean = false;
1301  if (pixelMap != undefined) {
1302    pixelMap.flip(horizontal, vertical).then(() => {
1303      console.info('Succeeded in flipping pixelmap.');
1304    }).catch((err: BusinessError) => {
1305      console.error(`Failed to flip pixelmap. code is ${err.code}, message is ${err.message}`);
1306
1307    })
1308  }
1309}
1310```
1311
1312### flipSync
1313
1314flipSync(horizontal: boolean, vertical: boolean): void
1315
1316根据输入的条件对图片进行翻转并同步返回结果。
1317
1318**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1319
1320**系统能力:** SystemCapability.Multimedia.Image.Core
1321
1322**参数:**
1323
1324| 参数名     | 类型                 | 必填 | 说明                          |
1325| ---------- | -------------------- | ---- | ----------------------------- |
1326| horizontal | boolean              | 是   | true表示进行水平翻转,false表示不进行水平翻转。            |
1327| vertical   | boolean              | 是   | true表示进行垂直翻转,false表示不进行垂直翻转。            |
1328
1329**错误码:**
1330
1331以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1332
1333| 错误码ID | 错误信息 |
1334| ------- | --------------------------------------------|
1335|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1336|  501    | Resource Unavailable. |
1337
1338**示例:**
1339
1340```ts
1341import { sendableImage } from '@kit.ImageKit';
1342
1343async function Demo(pixelMap : sendableImage.PixelMap) {
1344  let horizontal : boolean = true;
1345  let vertical : boolean = false;
1346  if (pixelMap != undefined) {
1347    pixelMap.flipSync(horizontal, vertical);
1348  }
1349}
1350```
1351
1352### crop
1353
1354crop(region: image.Region): Promise\<void>
1355
1356根据输入的尺寸对图片进行裁剪,使用Promise形式返回。
1357
1358**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1359
1360**系统能力:** SystemCapability.Multimedia.Image.Core
1361
1362**参数:**
1363
1364| 参数名 | 类型               | 必填 | 说明        |
1365| ------ | ------------------ | ---- | ----------- |
1366| region | [image.Region](../apis-image-kit/arkts-apis-image-i.md#region8) | 是   | 裁剪的尺寸。|
1367
1368**返回值:**
1369
1370| 类型           | 说明                        |
1371| -------------- | --------------------------- |
1372| Promise\<void> | Promise实例,异步返回结果。 |
1373
1374**示例:**
1375
1376```ts
1377import { sendableImage } from '@kit.ImageKit';
1378import { image } from '@kit.ImageKit';
1379import { BusinessError } from '@kit.BasicServicesKit';
1380
1381async function Demo(pixelMap : sendableImage.PixelMap) {
1382  let region: image.Region = { x: 0, y: 0, size: { height: 100, width: 100 } };
1383  if (pixelMap != undefined) {
1384    pixelMap.crop(region).then(() => {
1385      console.info('Succeeded in cropping pixelmap.');
1386    }).catch((err: BusinessError) => {
1387      console.error(`Failed to crop pixelmap. code is ${err.code}, message is ${err.message}`);
1388
1389    });
1390  }
1391}
1392```
1393
1394### cropSync
1395
1396cropSync(region: image.Region): void
1397
1398根据输入的尺寸裁剪图片。
1399
1400**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1401
1402**系统能力:** SystemCapability.Multimedia.Image.Core
1403
1404**参数:**
1405
1406| 参数名   | 类型                 | 必填 | 说明                          |
1407| -------- | -------------------- | ---- | ----------------------------- |
1408| region   | [image.Region](../apis-image-kit/arkts-apis-image-i.md#region8)   | 是   | 裁剪的尺寸。                  |
1409
1410**错误码:**
1411
1412以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1413
1414| 错误码ID | 错误信息 |
1415| ------- | --------------------------------------------|
1416|  401    | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1417|  501    | Resource Unavailable. |
1418
1419**示例:**
1420
1421```ts
1422import { sendableImage } from '@kit.ImageKit';
1423import { image } from '@kit.ImageKit';
1424
1425async function Demo(pixelMap : sendableImage.PixelMap) {
1426  let region : image.Region = { x: 0, y: 0, size: { height: 100, width: 100 } };
1427  if (pixelMap != undefined) {
1428    pixelMap.cropSync(region);
1429  }
1430}
1431```
1432
1433### getColorSpace
1434
1435getColorSpace(): colorSpaceManager.ColorSpaceManager
1436
1437获取图像广色域信息。
1438
1439**系统能力:** SystemCapability.Multimedia.Image.Core
1440
1441**返回值:**
1442
1443| 类型                                | 说明             |
1444| ----------------------------------- | ---------------- |
1445| [colorSpaceManager.ColorSpaceManager](../apis-arkgraphics2d/js-apis-colorSpaceManager.md#colorspacemanager) | 图像广色域信息。 |
1446
1447**错误码:**
1448
1449以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
1450
1451| 错误码ID | 错误信息 |
1452| ------- | --------------------------------------------|
1453| 62980101| If the image data abnormal.            |
1454| 62980103| If the image data unsupport.             |
1455| 62980115| If the image parameter invalid.            |
1456
1457**示例:**
1458
1459```ts
1460import { sendableImage } from '@kit.ImageKit';
1461
1462async function Demo(pixelMap : sendableImage.PixelMap) {
1463  if (pixelMap != undefined) {
1464    let csm = pixelMap.getColorSpace();
1465  }
1466}
1467```
1468
1469### setColorSpace
1470
1471setColorSpace(colorSpace: colorSpaceManager.ColorSpaceManager): void
1472
1473设置图像广色域信息。
1474
1475**系统能力:** SystemCapability.Multimedia.Image.Core
1476
1477**参数:**
1478
1479| 参数名     | 类型                                | 必填 | 说明            |
1480| ---------- | ----------------------------------- | ---- | --------------- |
1481| colorSpace | [colorSpaceManager.ColorSpaceManager](../apis-arkgraphics2d/js-apis-colorSpaceManager.md#colorspacemanager) | 是   | 图像广色域信息。|
1482
1483**错误码:**
1484
1485以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
1486
1487| 错误码ID | 错误信息 |
1488| ------- | --------------------------------------------|
1489| 62980111| If the operation invalid.        |
1490| 62980115| If the image parameter invalid.             |
1491
1492**示例:**
1493
1494```ts
1495import { sendableImage } from '@kit.ImageKit';
1496import { colorSpaceManager } from '@kit.ArkGraphics2D';
1497
1498async function Demo(pixelMap : sendableImage.PixelMap) {
1499  let colorSpaceName = colorSpaceManager.ColorSpace.SRGB;
1500  let csm: colorSpaceManager.ColorSpaceManager = colorSpaceManager.create(colorSpaceName);
1501  if (pixelMap != undefined) {
1502    pixelMap.setColorSpace(csm);
1503  }
1504}
1505```
1506
1507### applyColorSpace
1508
1509applyColorSpace(targetColorSpace: colorSpaceManager.ColorSpaceManager): Promise\<void>
1510
1511根据输入的目标色彩空间对图像像素颜色进行色彩空间转换,使用Promise形式返回。
1512
1513**系统能力:** SystemCapability.Multimedia.Image.Core
1514
1515**参数:**
1516
1517| 参数名 | 类型               | 必填 | 说明        |
1518| ------ | ------------------ | ---- | ----------- |
1519| targetColorSpace | [colorSpaceManager.ColorSpaceManager](../apis-arkgraphics2d/js-apis-colorSpaceManager.md#colorspacemanager) | 是   | 目标色彩空间,支持SRGB、DCI_P3、DISPLAY_P3、ADOBE_RGB_1998。|
1520
1521**返回值:**
1522
1523| 类型           | 说明                        |
1524| -------------- | --------------------------- |
1525| Promise\<void> | Promise实例,异步返回结果。 |
1526
1527**错误码:**
1528
1529以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Image错误码](errorcode-image.md)。
1530
1531| 错误码ID | 错误信息 |
1532| ------- | ------------------------------------------|
1533| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
1534| 62980104| Failed to initialize the internal object. |
1535| 62980108| Failed to convert the color space.       |
1536| 62980115| Invalid image parameter.            |
1537
1538**示例:**
1539
1540```ts
1541import { sendableImage } from '@kit.ImageKit';
1542import { colorSpaceManager } from '@kit.ArkGraphics2D';
1543import { BusinessError } from '@kit.BasicServicesKit';
1544
1545async function Demo(pixelMap : sendableImage.PixelMap) {
1546    let colorSpaceName = colorSpaceManager.ColorSpace.SRGB;
1547    let targetColorSpace: colorSpaceManager.ColorSpaceManager = colorSpaceManager.create(colorSpaceName);
1548    pixelMap.applyColorSpace(targetColorSpace).then(() => {
1549        console.info('Succeeded in applying color space for pixelmap object.');
1550    }).catch((error: BusinessError) => {
1551        console.error(`Failed to apply color space for pixelmap object. code is ${error.code}, message is ${error.message}`);
1552    })
1553}
1554```
1555
1556### marshalling
1557
1558marshalling(sequence: rpc.MessageSequence): void
1559
1560将PixelMap序列化后写入MessageSequence。
1561
1562**系统能力:** SystemCapability.Multimedia.Image.Core
1563
1564**参数:**
1565
1566| 参数名                 | 类型                                                  | 必填 | 说明                                     |
1567| ---------------------- | ------------------------------------------------------ | ---- | ---------------------------------------- |
1568| sequence               | [rpc.MessageSequence](../apis-ipc-kit/js-apis-rpc.md#messagesequence9)  | 是   | 新创建的MessageSequence。                 |
1569
1570**错误码:**
1571
1572以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
1573
1574| 错误码ID | 错误信息 |
1575| ------- | --------------------------------------------|
1576| 62980115 | Invalid image parameter.              |
1577| 62980097 | IPC error.             |
1578
1579**示例:**
1580
1581```ts
1582import { sendableImage } from '@kit.ImageKit';
1583import { image } from '@kit.ImageKit';
1584import { rpc } from '@kit.IPCKit';
1585
1586class MySequence implements rpc.Parcelable {
1587  pixel_map: sendableImage.PixelMap;
1588  constructor(conPixelMap : sendableImage.PixelMap) {
1589    this.pixel_map = conPixelMap;
1590  }
1591  marshalling(messageSequence : rpc.MessageSequence) {
1592    this.pixel_map.marshalling(messageSequence);
1593    console.info('marshalling');
1594    return true;
1595  }
1596  unmarshalling(messageSequence : rpc.MessageSequence) {
1597    sendableImage.createPixelMap(new ArrayBuffer(96), {size: { height:4, width: 6}}).then((pixelParcel: sendableImage.PixelMap) => {
1598      pixelParcel.unmarshalling(messageSequence).then(async (pixelMap: sendableImage.PixelMap) => {
1599        this.pixel_map = pixelMap;
1600        pixelMap.getImageInfo().then((imageInfo: image.ImageInfo) => {
1601          console.info("unmarshalling information h:" + imageInfo.size.height + "w:" + imageInfo.size.width);
1602        })
1603      })
1604    });
1605    return true;
1606  }
1607}
1608
1609async function Demo() {
1610  const color: ArrayBuffer = new ArrayBuffer(96);
1611  let bufferArr: Uint8Array = new Uint8Array(color);
1612  for (let i = 0; i < bufferArr.length; i++) {
1613    bufferArr[i] = 0x80;
1614  }
1615  let opts: image.InitializationOptions = {
1616    editable: true,
1617    pixelFormat: 4,
1618    size: { height: 4, width: 6 },
1619    alphaType: 3
1620  }
1621  let pixelMap: sendableImage.PixelMap | undefined = undefined;
1622  await sendableImage.createPixelMap(color, opts).then((srcPixelMap: sendableImage.PixelMap) => {
1623    pixelMap = srcPixelMap;
1624  })
1625  if (pixelMap != undefined) {
1626    // 序列化。
1627    let parcelable: MySequence = new MySequence(pixelMap);
1628    let data: rpc.MessageSequence = rpc.MessageSequence.create();
1629    data.writeParcelable(parcelable);
1630
1631    // 反序列化rpc获取到data。
1632    let ret: MySequence = new MySequence(pixelMap);
1633    data.readParcelable(ret);
1634  }
1635}
1636```
1637
1638### unmarshalling
1639
1640unmarshalling(sequence: rpc.MessageSequence): Promise\<PixelMap>
1641
1642从MessageSequence中获取PixelMap,
1643如需使用同步方式创建PixelMap可使用:[createPixelMapFromParcel](#sendableimagecreatepixelmapfromparcel)。
1644
1645**系统能力:** SystemCapability.Multimedia.Image.Core
1646
1647**参数:**
1648
1649| 参数名                 | 类型                                                  | 必填 | 说明                                     |
1650| ---------------------- | ----------------------------------------------------- | ---- | ---------------------------------------- |
1651| sequence               | [rpc.MessageSequence](../apis-ipc-kit/js-apis-rpc.md#messagesequence9) | 是   | 保存有PixelMap信息的MessageSequence。      |
1652
1653**返回值:**
1654
1655| 类型                             | 说明                  |
1656| -------------------------------- | --------------------- |
1657| Promise\<[PixelMap](#pixelmap)> | Promise实例,用于异步获取结果,失败时返回错误信息。 |
1658
1659**错误码:**
1660
1661以下错误码的详细介绍请参见[Image错误码](errorcode-image.md)。
1662
1663| 错误码ID | 错误信息 |
1664| ------- | --------------------------------------------|
1665| 62980115 | Invalid image parameter.              |
1666| 62980097 | IPC error.              |
1667| 62980096 | The operation failed.         |
1668
1669**示例:**
1670
1671```ts
1672import { sendableImage } from '@kit.ImageKit';
1673import { image } from '@kit.ImageKit';
1674import { rpc } from '@kit.IPCKit';
1675
1676class MySequence implements rpc.Parcelable {
1677  pixel_map: sendableImage.PixelMap;
1678  constructor(conPixelMap: sendableImage.PixelMap) {
1679    this.pixel_map = conPixelMap;
1680  }
1681  marshalling(messageSequence: rpc.MessageSequence) {
1682    this.pixel_map.marshalling(messageSequence);
1683    console.info('marshalling');
1684    return true;
1685  }
1686  unmarshalling(messageSequence: rpc.MessageSequence) {
1687    sendableImage.createPixelMap(new ArrayBuffer(96), {size: { height:4, width: 6}}).then((pixelParcel : sendableImage.PixelMap) => {
1688      pixelParcel.unmarshalling(messageSequence).then(async (pixelMap : sendableImage.PixelMap) => {
1689        this.pixel_map = pixelMap;
1690        pixelMap.getImageInfo().then((imageInfo : image.ImageInfo) => {
1691          console.info("unmarshalling information h:" + imageInfo.size.height + "w:" + imageInfo.size.width);
1692        })
1693      })
1694    });
1695    return true;
1696  }
1697}
1698
1699async function Demo() {
1700  const color: ArrayBuffer = new ArrayBuffer(96);
1701  let bufferArr: Uint8Array = new Uint8Array(color);
1702  for (let i = 0; i < bufferArr.length; i++) {
1703    bufferArr[i] = 0x80;
1704  }
1705  let opts: image.InitializationOptions = {
1706    editable: true,
1707    pixelFormat: 4,
1708    size: { height: 4, width: 6 },
1709    alphaType: 3
1710  }
1711  let pixelMap: sendableImage.PixelMap | undefined = undefined;
1712  await sendableImage.createPixelMap(color, opts).then((srcPixelMap : sendableImage.PixelMap) => {
1713    pixelMap = srcPixelMap;
1714  })
1715  if (pixelMap != undefined) {
1716    // 序列化。
1717    let parcelable: MySequence = new MySequence(pixelMap);
1718    let data : rpc.MessageSequence = rpc.MessageSequence.create();
1719    data.writeParcelable(parcelable);
1720
1721    // 反序列化rpc获取到data。
1722    let ret : MySequence = new MySequence(pixelMap);
1723    data.readParcelable(ret);
1724  }
1725}
1726```
1727
1728### release
1729
1730release():Promise\<void>
1731
1732释放PixelMap对象,使用Promise形式返回释放结果。
1733
1734**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1735
1736**系统能力:** SystemCapability.Multimedia.Image.Core
1737
1738**返回值:**
1739
1740| 类型           | 说明                            |
1741| -------------- | ------------------------------- |
1742| Promise\<void> | Promise实例,异步返回释放结果。 |
1743
1744**示例:**
1745
1746```ts
1747import { BusinessError } from '@kit.BasicServicesKit';
1748import { sendableImage } from '@kit.ImageKit';
1749
1750async function Demo(pixelMap: sendableImage.PixelMap) {
1751  if (pixelMap != undefined) {
1752    await pixelMap.release().then(() => {
1753      console.info('Succeeded in releasing pixelmap object.');
1754    }).catch((error: BusinessError) => {
1755      console.error(`Failed to release pixelmap object. code is ${error.code}, message is ${error.message}`);
1756    })
1757  }
1758}
1759```
1760
1761## Size
1762
1763表示图片尺寸。
1764继承自[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)。
1765
1766**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
1767
1768**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1769
1770**系统能力:** SystemCapability.Multimedia.Image.Core
1771
1772| 名称   | 类型   | 只读 | 可选 | 说明           |
1773| ------ | ------ | ---- | ---- | -------------- |
1774| height | number | 否   | 否   | 输出图片的高,单位:像素。 |
1775| width  | number | 否   | 否   | 输出图片的宽,单位:像素。 |
1776
1777## Region
1778
1779表示区域信息。
1780继承自[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)。
1781
1782**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
1783
1784**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1785
1786**系统能力:** SystemCapability.Multimedia.Image.Core
1787
1788| 名称 | 类型          | 只读 | 可选 | 说明         |
1789| ---- | ------------- | ---- | ---- | ------------ |
1790| size | [Size](#size) | 否   | 否   | 区域大小。   |
1791| x    | number        | 否   | 否   | 区域横坐标。单位:像素。 |
1792| y    | number        | 否   | 否   | 区域纵坐标。单位:像素。 |
1793
1794## sendableImage.createImageSource
1795
1796createImageSource(uri: string): ImageSource
1797
1798通过传入的uri创建ImageSource实例。
1799
1800
1801**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1802
1803**系统能力:** SystemCapability.Multimedia.Image.ImageSource
1804
1805**参数:**
1806
1807| 参数名 | 类型   | 必填 | 说明                               |
1808| ------ | ------ | ---- | ---------------------------------- |
1809| uri    | string | 是   | 图片路径,当前仅支持应用沙箱路径。</br>当前支持格式有:.jpg .png .gif .bmp .webp .dng [SVG](arkts-apis-image-f.md#svg标签说明) .ico。 |
1810
1811**返回值:**
1812
1813| 类型                        | 说明                                         |
1814| --------------------------- | -------------------------------------------- |
1815| [ImageSource](#imagesource) | 返回ImageSource类实例,失败时返回undefined。 |
1816
1817**示例:**
1818
1819```ts
1820import { sendableImage } from '@kit.ImageKit';
1821
1822async function Demo(context : Context) {
1823  const path: string = context.cacheDir + "/test.jpg";
1824  const sendableImageSourceObj: sendableImage.ImageSource = sendableImage.createImageSource(path);
1825}
1826```
1827
1828## sendableImage.createImageSource
1829
1830createImageSource(fd: number): ImageSource
1831
1832通过传入文件描述符来创建ImageSource实例。
1833
1834**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1835
1836**系统能力:** SystemCapability.Multimedia.Image.ImageSource
1837
1838**参数:**
1839
1840| 参数名 | 类型   | 必填 | 说明          |
1841| ------ | ------ | ---- | ------------- |
1842| fd     | number | 是   | 文件描述符fd。|
1843
1844**返回值:**
1845
1846| 类型                        | 说明                                         |
1847| --------------------------- | -------------------------------------------- |
1848| [ImageSource](#imagesource) | 返回ImageSource类实例,失败时返回undefined。 |
1849
1850**示例:**
1851
1852```ts
1853import { sendableImage } from '@kit.ImageKit';
1854import { fileIo as fs } from '@kit.CoreFileKit';
1855
1856async function Demo(context : Context) {
1857  const path: string = context.cacheDir + "/test.jpg";
1858  let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
1859  const sendableImageSourceObj: sendableImage.ImageSource = sendableImage.createImageSource(file.fd);
1860}
1861```
1862
1863## sendableImage.createImageSource
1864
1865createImageSource(buf: ArrayBuffer): ImageSource
1866
1867通过缓冲区创建ImageSource实例。
1868
1869**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
1870
1871**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1872
1873**系统能力:** SystemCapability.Multimedia.Image.ImageSource
1874
1875**参数:**
1876
1877| 参数名 | 类型        | 必填 | 说明             |
1878| ------ | ----------- | ---- | ---------------- |
1879| buf    | ArrayBuffer | 是   | 图像缓冲区数组。 |
1880
1881**返回值:**
1882
1883| 类型                        | 说明                                         |
1884| --------------------------- | -------------------------------------------- |
1885| [ImageSource](#imagesource) | 返回ImageSource类实例,失败时返回undefined。 |
1886
1887**示例:**
1888
1889```ts
1890import { sendableImage } from '@kit.ImageKit';
1891
1892async function Demo() {
1893  const buf: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4。
1894  const sendableImageSourceObj: sendableImage.ImageSource = sendableImage.createImageSource(buf);
1895}
1896```
1897
1898## sendableImage.createImageReceiver
1899
1900createImageReceiver(size: image.Size, format: image.ImageFormat, capacity: number): ImageReceiver
1901
1902通过图片大小、图片格式、容量创建ImageReceiver实例。
1903
1904**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
1905
1906**参数:**
1907
1908| 参数名   | 类型   | 必填 | 说明                   |
1909| -------- | ------ | ---- | ---------------------- |
1910| size    | [image.Size](./arkts-apis-image-i.md#size)  | 是   | 图像的默认大小。       |
1911| format   | [image.ImageFormat](./arkts-apis-image-e.md#imageformat9) | 是   | 图像格式,取值为image.ImageFormat常量,目前仅支持 ImageFormat:JPEG。             |
1912| capacity | number | 是   | 同时访问的最大图像数。该参数仅作为期望值,实际capacity由设备硬件决定。 |
1913
1914**返回值:**
1915
1916| 类型                             | 说明                                    |
1917| -------------------------------- | --------------------------------------- |
1918| [ImageReceiver](#imagereceiver) | 如果操作成功,则返回ImageReceiver实例。 |
1919
1920**错误码:**
1921
1922以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)。
1923
1924| 错误码ID | 错误信息 |
1925| ------- | --------------------------------------------|
1926|  401    |  The parameter check failed. |
1927
1928**示例:**
1929
1930```ts
1931import { sendableImage } from '@kit.ImageKit';
1932import { image } from '@kit.ImageKit';
1933
1934async function Demo() {
1935    let size: image.Size = {
1936        height: 8192,
1937        width: 8
1938    }
1939    let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
1940}
1941```
1942
1943## ImageSource
1944
1945ImageSource类,用于获取图片相关信息。在调用ImageSource的方法前,需要先通过[createImageSource](#sendableimagecreateimagesource)构建一个ImageSource实例。
1946
1947
1948### createPixelMap
1949
1950createPixelMap(options?: image.DecodingOptions): Promise\<PixelMap>
1951
1952通过图片解码参数创建PixelMap对象。
1953
1954**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
1955
1956**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1957
1958**系统能力:** SystemCapability.Multimedia.Image.ImageSource
1959
1960**参数:**
1961
1962| 参数名  | 类型                                 | 必填 | 说明       |
1963| ------- | ------------------------------------ | ---- | ---------- |
1964| options | [image.DecodingOptions](./arkts-apis-image-i.md#decodingoptions7) | 否   | 解码参数。 |
1965
1966**返回值:**
1967
1968| 类型                             | 说明                  |
1969| -------------------------------- | --------------------- |
1970| Promise\<[PixelMap]> | Promise实例,用于异步返回创建结果。 |
1971
1972**示例:**
1973
1974```ts
1975import { sendableImage } from '@kit.ImageKit';
1976import { BusinessError } from '@kit.BasicServicesKit';
1977
1978async function Demo(context : Context) {
1979  const path: string = context.cacheDir + "/test.jpg";
1980  const sendableImageSourceObj: sendableImage.ImageSource = sendableImage.createImageSource(path);
1981  sendableImageSourceObj.createPixelMap().then((pixelMap: sendableImage.PixelMap) => {
1982    console.info('Succeeded in creating pixelMap object through image decoding parameters.');
1983  }).catch((error: BusinessError) => {
1984    console.error(`Failed to create pixelMap object through image decoding parameters. code ${error.code}, message is ${error.message}`);
1985  })
1986}
1987```
1988
1989### release
1990
1991release(): Promise\<void>
1992
1993释放ImageSource实例,使用Promise形式返回结果。release是线程不安全的。
1994
1995**系统能力:** SystemCapability.Multimedia.Image.ImageSource
1996
1997**返回值:**
1998
1999| 类型           | 说明                        |
2000| -------------- | --------------------------- |
2001| Promise\<void> | Promise实例,异步返回结果。 |
2002
2003**示例:**
2004
2005```ts
2006import { sendableImage } from '@kit.ImageKit';
2007import { BusinessError } from '@kit.BasicServicesKit';
2008
2009async function Demo(context : Context) {
2010  const path: string = context.cacheDir + "/test.jpg";
2011  const sendableImageSourceObj: sendableImage.ImageSource = sendableImage.createImageSource(path);
2012  sendableImageSourceObj.release().then(() => {
2013    console.info('Succeeded in releasing the image source instance.');
2014  }).catch((error: BusinessError) => {
2015    console.error(`Failed to release the image source instance. code ${error.code}, message is ${error.message}`);
2016  })
2017}
2018```
2019
2020## Image
2021
2022提供基本的图像操作,包括获取图像信息、读写图像数据。调用[readNextImage](#readnextimage)和[readLatestImage](#readlatestimage)接口时会返回image。继承自[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)。
2023
2024### 属性
2025
2026**系统能力:** SystemCapability.Multimedia.Image.Core
2027
2028| 名称     | 类型               | 只读 | 可选 | 说明                                               |
2029| -------- | ------------------ | ---- | ---- | -------------------------------------------------- |
2030| clipRect | [Region](#region) | 否   | 否   | 要裁剪的图像区域。                                 |
2031| size     | [Size](#size)      | 是   | 否   | 图像大小。如果image对象所存储的是相机预览流数据,即YUV图像数据,那么获取到的size中的宽高分别对应YUV图像的宽高; 如果image对象所存储的是相机拍照流数据,即JPEG图像,由于已经是编码后的文件,size中的宽等于JPEG文件大小,高等于1。image对象所存储的数据是预览流还是拍照流,取决于应用将receiver中的surfaceId传给相机的previewOutput还是captureOutput。相机预览与拍照最佳实践请参考[双路预览(ArkTS)](../../media/camera/camera-dual-channel-preview.md)与[拍照实现方案(ArkTS)](../../media/camera/camera-shooting-case.md)。                                         |
2032| format   | number             | 是   | 否   | 图像格式,参考[OH_NativeBuffer_Format](../apis-arkgraphics2d/capi-native-buffer-h.md#oh_nativebuffer_format)。 |
2033| timestamp<sup>12+</sup> | number         | 是      | 否   | 图像时间戳。时间戳以纳秒为单位,通常是单调递增的。时间戳的具体含义和基准取决于图像的生产者,在相机预览/拍照场景,生产者就是相机。来自不同生产者的图像的时间戳可能有不同的含义和基准,因此可能无法进行比较。如果要获取某张照片的生成时间,可以通过[getImageProperty](arkts-apis-image-ImageSource.md#getimageproperty11)接口读取相关的EXIF信息。|
2034
2035### getComponent
2036
2037getComponent(componentType: image.ComponentType): Promise\<image.Component>
2038
2039根据图像的组件类型从图像中获取组件缓存并使用Promise方式返回结果。getComponent是线程不安全的。
2040
2041**系统能力:** SystemCapability.Multimedia.Image.Core
2042
2043**参数:**
2044
2045| 参数名        | 类型                             | 必填 | 说明             |
2046| ------------- | -------------------------------- | ---- | ---------------- |
2047| componentType | [image.ComponentType](./arkts-apis-image-e.md#componenttype9) | 是   | 图像的组件类型。 |
2048
2049**返回值:**
2050
2051| 类型                              | 说明                              |
2052| --------------------------------- | --------------------------------- |
2053| Promise<[image.Component](./arkts-apis-image-i.md#component9)> | Promise实例,用于异步返回组件缓冲区。 |
2054
2055**示例:**
2056
2057```ts
2058import { sendableImage } from '@kit.ImageKit';
2059import { BusinessError } from '@kit.BasicServicesKit';
2060import { image } from '@kit.ImageKit';
2061
2062async function Demo() {
2063  let size: image.Size = {
2064    height: 8192,
2065    width: 8
2066  }
2067  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2068  let img = await receiver.readNextImage();
2069  img.getComponent(image.ComponentType.JPEG).then((component: image.Component) => {
2070    console.info('getComponent succeeded.');
2071  }).catch((error: BusinessError) => {
2072    console.error(`getComponent failed code ${error.code}, message is ${error.message}`);
2073  })
2074}
2075```
2076
2077### release
2078
2079release(): Promise\<void>
2080
2081释放当前图像并使用Promise方式返回结果。
2082
2083在接收另一个图像前必须先释放对应资源。release是线程不安全的。
2084
2085
2086**系统能力:** SystemCapability.Multimedia.Image.Core
2087
2088**返回值:**
2089
2090| 类型           | 说明                  |
2091| -------------- | --------------------- |
2092| Promise\<void> | promise返回操作结果。 |
2093
2094**示例:**
2095
2096```ts
2097import { sendableImage } from '@kit.ImageKit';
2098import { BusinessError } from '@kit.BasicServicesKit';
2099import { image } from '@kit.ImageKit';
2100
2101async function Demo() {
2102  let size: image.Size = {
2103    height: 8192,
2104    width: 8
2105  }
2106  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2107  let img = await receiver.readNextImage();
2108  img.release().then(() => {
2109    console.info('release succeeded.');
2110  }).catch((error: BusinessError) => {
2111    console.error(`release failed. code ${error.code}, message is ${error.message}`);
2112  })
2113}
2114```
2115
2116## ImageReceiver
2117
2118图像接收类,用于获取组件surface id,接收最新的图片和读取下一张图片,以及释放ImageReceiver实例。
2119
2120在调用以下方法前需要先创建ImageReceiver实例。
2121
2122### 属性
2123
2124**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2125
2126| 名称     | 类型                         | 只读 | 可选 | 说明               |
2127| -------- | ---------------------------- | ---- | ---- | ------------------ |
2128| size     | [image.Size](./arkts-apis-image-i.md#size)                | 是   | 否   | 图片大小。         |
2129| capacity | number                       | 是   | 否   | 同时访问的图像数。该参数仅作为期望值,实际capacity由设备硬件决定。 |
2130| format   | [image.ImageFormat](./arkts-apis-image-e.md#imageformat9) | 是   | 否   | 图像格式。         |
2131
2132### getReceivingSurfaceId
2133
2134getReceivingSurfaceId(): Promise\<string>
2135
2136用于获取一个surface id供Camera或其他组件使用。使用promise返回结果。
2137
2138**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2139
2140**返回值:**
2141
2142| 类型             | 说明                 |
2143| ---------------- | -------------------- |
2144| Promise\<string> | 异步返回surface id。 |
2145
2146**示例:**
2147
2148```ts
2149import { sendableImage } from '@kit.ImageKit';
2150import { BusinessError } from '@kit.BasicServicesKit';
2151import { image } from '@kit.ImageKit';
2152
2153async function Demo() {
2154  let size: image.Size = {
2155    height: 8192,
2156    width: 8
2157  }
2158  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2159  receiver.getReceivingSurfaceId().then((id: string) => {
2160    console.info('Succeeded in getting the ReceivingSurfaceId.');
2161  }).catch((error: BusinessError) => {
2162    console.error(`Failed to get the ReceivingSurfaceId.code ${error.code}, message is ${error.message}`);
2163  })
2164}
2165```
2166
2167### readLatestImage
2168
2169readLatestImage(): Promise\<Image>
2170
2171从ImageReceiver读取最新的图片,并使用promise返回结果。
2172
2173**注意**:此接口需要在[on](#on)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](#image)对象使用完毕后需要调用[release](#release-2)方法释放,释放后才可以继续接收新的数据。
2174
2175**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2176
2177**返回值:**
2178
2179| 类型                      | 说明               |
2180| ------------------------- | ------------------ |
2181| Promise<[Image](#image)> | 异步返回最新图片。 |
2182
2183**示例:**
2184
2185```ts
2186import { sendableImage } from '@kit.ImageKit';
2187import { BusinessError } from '@kit.BasicServicesKit';
2188import { image } from '@kit.ImageKit';
2189
2190async function Demo() {
2191  let size: image.Size = {
2192    height: 8192,
2193    width: 8
2194  }
2195  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2196  receiver.readLatestImage().then((img: image.Image) => {
2197    console.info('readLatestImage succeeded.');
2198  }).catch((error: BusinessError) => {
2199    console.error(`readLatestImage failed. code ${error.code}, message is ${error.message}`);
2200  })
2201}
2202```
2203
2204### readNextImage
2205
2206readNextImage(): Promise\<Image>
2207
2208从ImageReceiver读取下一张图片,并使用promise返回结果。
2209
2210**注意**:此接口需要在[on](#on)回调触发后调用,才能正常的接收到数据。且此接口返回的[Image](#image)对象使用完毕后需要调用[release](#release-2)方法释放,释放后才可以继续接收新的数据。
2211
2212**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2213
2214**返回值:**
2215
2216| 类型                      | 说明                 |
2217| ------------------------- | -------------------- |
2218| Promise<[Image](#image)> | 异步返回下一张图片。 |
2219
2220**示例:**
2221
2222```ts
2223import { sendableImage } from '@kit.ImageKit';
2224import { BusinessError } from '@kit.BasicServicesKit';
2225import { image } from '@kit.ImageKit';
2226
2227async function Demo() {
2228  let size: image.Size = {
2229    height: 8192,
2230    width: 8
2231  }
2232  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2233  receiver.readNextImage().then((img: image.Image) => {
2234    console.info('readNextImage succeeded.');
2235  }).catch((error: BusinessError) => {
2236    console.error(`readNextImage failed. code ${error.code}, message is ${error.message}`);
2237  })
2238}
2239```
2240
2241### on
2242
2243on(type: 'imageArrival', callback: AsyncCallback\<void>): void
2244
2245接收图片时注册回调。
2246
2247**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2248
2249**参数:**
2250
2251| 参数名   | 类型                 | 必填 | 说明                                                   |
2252| -------- | -------------------- | ---- | ------------------------------------------------------ |
2253| type     | string               | 是   | 注册事件的类型,固定为'imageArrival',接收图片时触发。 |
2254| callback | AsyncCallback\<void> | 是   | 注册的事件回调。                                       |
2255
2256**示例:**
2257
2258```ts
2259import { sendableImage } from '@kit.ImageKit';
2260import { image } from '@kit.ImageKit';
2261
2262async function Demo() {
2263  let size: image.Size = {
2264    height: 8192,
2265    width: 8
2266  }
2267  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2268  receiver.on('imageArrival', () => {
2269    // 接收到图片,实现回调函数逻辑。
2270  })
2271}
2272```
2273
2274### release
2275
2276release(): Promise\<void>
2277
2278释放ImageReceiver实例并使用promise返回结果。release是线程不安全的。
2279
2280**系统能力:** SystemCapability.Multimedia.Image.ImageReceiver
2281
2282**返回值:**
2283
2284| 类型           | 说明               |
2285| -------------- | ------------------ |
2286| Promise\<void> | 异步返回操作结果。 |
2287
2288**示例:**
2289
2290```ts
2291import { sendableImage } from '@kit.ImageKit';
2292import { BusinessError } from '@kit.BasicServicesKit';
2293import { image } from '@kit.ImageKit';
2294
2295async function Demo() {
2296  let size: image.Size = {
2297    height: 8192,
2298    width: 8
2299  }
2300  let receiver: sendableImage.ImageReceiver = sendableImage.createImageReceiver(size, image.ImageFormat.JPEG, 8);
2301  receiver.release().then(() => {
2302    console.info('release succeeded.');
2303  }).catch((error: BusinessError) => {
2304    console.error(`release failed. code ${error.code}, message is ${error.message}`);
2305  })
2306}
2307```
2308