在 OpenHarmony 中,图片解码通常有两种常见方式,取决于你使用的开发形态(ArkTS / eTS 还是 C/C++ / Native)。下面分别说明。
如果只是显示图片,不需要手动解码:
Image($r('app.media.test'))
.width(100)
.height(100)
或:
Image('file:///data/storage/el2/base/haps/entry/files/test.png')
✅ 系统自动完成解码
@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);
}
const imageSource = image.createImageSource(arrayBuffer);
const pixelMap = await imageSource.createPixelMap();
pixelMap.getImageInfo()
pixelMap.readPixelsToBuffer()
pixelMap.scale()
pixelMap.crop()
pixelMap.release()
适合:
#include <multimedia/image_framework/image_source.h>
流程:
ImageSourceNativeImageSource_CreatePixelMapPixelMapNative⚠️ Native 解码需要:
libimage_ndk.z.soOpenHarmony 默认支持:
❌ 路径错误
✅ 必须使用 file:// 或 fd
❌ 忘记释放 PixelMap
✅ pixelMap.release()
❌ 主线程解码大图
✅ 建议异步
| 场景 | 推荐方式 |
|---|---|
| 显示图片 | Image 组件 |
| 处理像素 | image.createImageSource |
| 高性能 | Native Image Kit |
如果你能告诉我:
我可以给你更精确的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。