温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

OpenHarmony图片怎么解码

发布时间:2026-10-31 14:50:28 来源:亿速云 阅读:93 作者:小樊 栏目:软件技术

在 OpenHarmony 中,图片解码通常有两种常见方式,取决于你使用的开发形态(ArkTS / eTS 还是 C/C++ / Native)。下面分别说明。


一、ArkTS / eTS 中图片解码(推荐,最简单)

1️⃣ 使用 Image 组件(自动解码)

如果只是显示图片,不需要手动解码:

Image($r('app.media.test'))
  .width(100)
  .height(100)

或:

Image('file:///data/storage/el2/base/haps/entry/files/test.png')

✅ 系统自动完成解码


2️⃣ 使用 @ohos.multimedia.image 手动解码

适用于:

  • 获取像素数据
  • 做图像处理
  • 解码内存中的图片

示例:解码文件图片

import image from '@ohos.multimedia.image';
import fileIO from '@ohos.fileio';

async function decodeImage() {
  // 1. 创建 ImageSource
  let fd = fileIO.openSync(
    '/data/storage/el2/base/haps/entry/files/test.png',
    fileIO.OpenMode.READ_ONLY
  );

  const imageSource = image.createImageSource(fd);

  // 2. 解码
  const pixelMap = await imageSource.createPixelMap();

  console.info('图片宽:' + pixelMap.getImageInfo().width);
}

解码内存数据(ArrayBuffer)

const imageSource = image.createImageSource(arrayBuffer);
const pixelMap = await imageSource.createPixelMap();

3️⃣ PixelMap 常用能力

pixelMap.getImageInfo()
pixelMap.readPixelsToBuffer()
pixelMap.scale()
pixelMap.crop()
pixelMap.release()

二、Native(C/C++)图片解码

适合:

  • 性能要求高
  • 音视频 / 图形处理
  • 自研解码器

使用 Image Kit(Native API)

#include <multimedia/image_framework/image_source.h>

流程:

  1. 创建 ImageSourceNative
  2. 调用 ImageSource_CreatePixelMap
  3. 获取 PixelMapNative

⚠️ Native 解码需要:

  • libimage_ndk.z.so
  • 正确的 ABI(arm64-v8a)

三、支持的图片格式

OpenHarmony 默认支持:

  • JPEG
  • PNG
  • BMP
  • WebP(部分版本)
  • GIF(解码首帧)

四、常见坑

❌ 路径错误
✅ 必须使用 file:// 或 fd

❌ 忘记释放 PixelMap
✅ pixelMap.release()

❌ 主线程解码大图
✅ 建议异步


五、总结

场景 推荐方式
显示图片 Image 组件
处理像素 image.createImageSource
高性能 Native Image Kit

如果你能告诉我:

  • OpenHarmony 版本(3.x / 4.x)
  • 使用 ArkTS 还是 Native
  • 图片来源(文件 / 网络 / 内存)

我可以给你更精确的示例代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手