图片文件与PixelMap、ArrayBuffer如何互相转换?

SDK 中的 api 和某些三方库接口中,有的地方需要传入图片文件 uri,有的需要传入 ArrayBuffer,有的需要 PixelMap,这这种类型如何进行相互转换?

HarmonyOS
图片处理
2025-03-25 13:41:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
乂心IsOneHeart
1

参考代码:

// Copyright (c) 2024-2025 IsOneHeart SoulHarbor - PixelArtisan

import image from '@ohos.multimedia.image';
import { resourceManager } from '@kit.LocalizationKit';
import { BusinessError } from '@kit.BasicServicesKit';

export class GetPixelMap {
  private url: string;
  private resourceMgr: resourceManager.ResourceManager;

  constructor(url: string) {
    this.url = url;
    const context: Context = getContext();
    this.resourceMgr = context.resourceManager;
  }

  public async getImageSource(): Promise<image.PixelMap | null> {
    try {
      // 获取图片的ArrayBuffer
      const fileData: Uint8Array = await this.resourceMgr.getRawFileContent(this.url);
      console.log("成功获取图片的ArrayBuffer。");
      const buffer = fileData.buffer.slice(0);
      const imageSource: image.ImageSource = image.createImageSource(buffer);
      // 创建pixelMap
      const pixelMap: image.PixelMap = await imageSource.createPixelMap();
      console.info("成功创建pixelMap。");
      return pixelMap;
    } catch (err) {
      console.error(err);
      return null;
    }
  }
}

export function getNeoPixelMap(): Promise<ArrayBuffer> {
  return new Promise((resolve, reject) => {
    const context: Context = getContext();
    const resourceMgr: resourceManager.ResourceManager = context.resourceManager;
    resourceMgr.getRawFileContent('test.jpg').then((fileData: Uint8Array) => {
      console.log("Succeeded in getting RawFileContent");
      const imageSource: image.ImageSource = image.createImageSource(fileData.buffer);
      imageSource.createPixelMap().then((pixelMap: PixelMap) => {
        const length: number = pixelMap.getPixelBytesNumber();
        const readBuffer: ArrayBuffer = new ArrayBuffer(length);
        pixelMap.readPixelsToBuffer(readBuffer).then(() => {
          console.info('Succeeded in reading image pixel data.');
          resolve(readBuffer);
        }).catch((error: BusinessError) => {
          console.error(`Failed to read image pixel data. code is ${error.code}, message is${error.message}`);
          reject(error);
        });
      }).catch((error: BusinessError) => {
        console.error("Failed to createPixelMap");
        reject(error);
      });
    }).catch((error: BusinessError) => {
      console.error("Failed to get RawFileContent");
      reject(error);
    });
  });
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.


分享
微博
QQ
微信
回复
2025-03-25 17:07:05
相关问题
HarmonyOS 网络图片如何转换PixelMap
578浏览 • 1回复 待解决
HarmonyOS image和PDF文件互相转换的能力
791浏览 • 1回复 待解决
HarmonyOS pixelMap转成ArrayBuffer
1089浏览 • 1回复 待解决
PixelMap怎么保存成图片文件
1210浏览 • 1回复 待解决
HarmonyOS SVG转换pixelMap
545浏览 • 1回复 待解决
hsp和har包互相转换方案
2103浏览 • 1回复 待解决
HarmonyOS如何将Component转换PixelMap
1265浏览 • 1回复 待解决
HarmonyOS SIM交互相关接口
444浏览 • 1回复 待解决
ArkTSC++互相直接调用
3735浏览 • 1回复 待解决
如何PixelMap处理图片
2994浏览 • 1回复 待解决
HarmonyOS pxvp如何转换
632浏览 • 1回复 待解决