• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 位图操作
2
3当需要对目标图片中的部分区域进行处理时,可以使用位图操作功能。此功能常用于图片美化等操作。
4
5如下图所示,一张图片中,将指定的矩形区域像素数据读取出来,进行修改后,再写回原图片对应区域。
6
7**图1** 位图操作示意图  
8![Bitmap operation](figures/bitmap-operation.png)
9
10## 开发步骤
11
12位图操作相关API的详细介绍请参见[API参考](../reference/apis/js-apis-image.md#pixelmap7)。
13
141. 完成[图片解码](image-decoding.md#开发步骤),获取PixelMap位图对象。
15
162. 从PixelMap位图对象中获取信息。
17
18   ```ts
19   // 获取图像像素的总字节数
20   let pixelBytesNumber = pixelMap.getPixelBytesNumber();
21   // 获取图像像素每行字节数
22   let rowCount = pixelMap.getBytesNumberPerRow();
23   // 获取当前图像像素密度。像素密度是指每英寸图片所拥有的像素数量。像素密度越大,图片越精细。
24   let getDensity = pixelMap.getDensity();
25   ```
26
273. 读取并修改目标区域像素数据,写回原图。
28
29   ```ts
30   // 场景一:将读取的整张图像像素数据结果写入ArrayBuffer中
31   const readBuffer = new ArrayBuffer(pixelBytesNumber);
32   pixelMap.readPixelsToBuffer(readBuffer).then(() => {
33     console.info('Succeeded in reading image pixel data.');
34   }).catch(error => {
35     console.error('Failed to read image pixel data. And the error is: ' + error);
36   })
37
38   // 场景二:读取指定区域内的图片数据,结果写入area.pixels39   const area = {
40     pixels: new ArrayBuffer(8),
41     offset: 0,
42     stride: 8,
43     region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
44   }
45   pixelMap.readPixels(area).then(() => {
46     console.info('Succeeded in reading the image data in the area.');
47   }).catch(error => {
48     console.error('Failed to read the image data in the area. And the error is: ' + error);
49   })
50
51   // 对于读取的图片数据,可以独立使用(创建新的pixelMap),也可以对area.pixels进行所需修改
52   // 将图片数据area.pixels写入指定区域内
53   pixelMap.writePixels(area).then(() => {
54     console.info('Succeeded to write pixelMap into the specified area.');
55   })
56
57   // 将图片数据结果写入pixelMap中
58   const writeColor = new ArrayBuffer(96);
59   pixelMap.writeBufferToPixels(writeColor, () => {});
60   ```
61