鸿蒙开发实践——对各种图片编解码格式的支持

【HarmonyOS NEXT】ffmpeg动态库如何在Mac上编译 开发一个音频播放应用,内部的播放器是基于ffmpeg自研开发的,所以需要开发对应鸿蒙版的播放器。针对HarmonyOS编译适配的动态库,但是根据文档描述现在是否有在Mac上编译的环境和工具集?另外文档中只提到了CMake编译方式,但是ffmpeg内部已经有配置好的脚本,如果通过传统的.sh脚本配置该如何配置编译?build.sh中保留11、12行并删除9到22行。ffmpeg动态库 / 播放器 / Mac编译。ffmpeg在mac上可以编译,需要修改“ 阅读详情

场景一:展示系统原生支持的图片格式编解码的代码实现

// 获取resourceManager资源管理
const context : Context = getContext(this);
const resourceMgr : resourceManager.ResourceManager = context.resourceManager;
// 创建ImageSource
resourceMgr.getRawFileContent('test.jpg').then((fileData : Uint8Array) => {
  console.log("Succeeded in getting RawFileContent")
  // 获取图片的ArrayBuffer
  const buffer = fileData.buffer.slice(0);
  const imageSource : image.ImageSource = image.createImageSource(buffer);
}).catch((err : BusinessError) => {
  console.error("Failed to get RawFileContent")
});
// 创建PixelMap
imageSource.createPixelMap().then((pixelMap: image.PixelMap) => {
   console.log("Succeeded in creating PixelMap")
}).catch((err : BusinessError) => {
   console.error("Failed to creating PixelMap")
});

场景二:使用第三方库进行系统原生不支持的常用图片格式解码进行解码

avif 格式

2.1 将libavif库添加到工程中,

2.1.1 编译第三方库

下载本仓库

git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1

三方库目录结构

o    tpc_c_cplusplus/thirdparty/libavif   #三方库libavif的目录结构如下
o    ├── docs                               #三方库相关文档的文件夹
o    ├── HPKBUILD                           #构建脚本
o    ├── HPKCHECK                           #自动化测试脚本
o    ├── SHA512SUM                          #三方库校验文件
o    ├── README.OpenSource                  #说明三方库源码的下载地址,版本,license等信息
o    ├── README_zh.md                       #三方库说明文档
├── OAT.xml                            #开源扫描相关文件
  • 在tpc_c_cplusplus/lycium目录下编译三方库

编译环境的搭建参考 准备三方库构建环境

cd tpc_c_cplusplus/lycium
./build.sh libavif
  • 三方库头文件及生成的库

在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件

DD一下:在探索鸿蒙系统的学习过程中,不少人都曾遇到过各种棘手问题。小编结合自身学习与实践经历,将容易踩坑的环节和对应的解决思路整理成攻略,希望这些经验分享能为同样在学习鸿蒙的伙伴们提供一些参考和帮助:

请移步前往小编:鸿蒙全栈开发学习指南 ​

1.鸿蒙全栈开发学习路线
2.OpenHarmony开发基础
3.OpenHarmony北向开发环境搭建
4.鸿蒙南向开发环境的搭建
5.鸿蒙生态应用开发白皮书V2.0 & V3.0
6.鸿蒙开发面试真题(含参考答案) 
7.TypeScript入门学习手册
8.OpenHarmony 经典面试题(含参考答案)
9.OpenHarmony设备开发入门【最新版】
10.沉浸式剖析OpenHarmony源代码
11.系统定制指南
12.【OpenHarmony】Uboot 驱动加载流程
13.OpenHarmony构建系统--GN与子系统、部件、模块详解
14.ohos开机init启动流程
15.鸿蒙版性能优化指南
......

2.1.2 应用中使用第三方库 

  • 拷贝动态库到\entry\libs\${OHOS_ARCH}\目录: 动态库需要在\entry\libs\${OHOS_ARCH}\目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录

  • 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示

  • 在最外层(cpp目录下)CMakeLists.txt中添加如下语句

#将三方库加入工程中
target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libaom.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libavif.so.16
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libgmock.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libgmock_main.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libgtest.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libgtest_main.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libjpeg.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libpng.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libpng16.a
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libyuv.so
)
#将三方库的头文件加入工程中
target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libavif/${OHOS_ARCH}/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libyuv/${OHOS_ARCH}/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libaom/${OHOS_ARCH}/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/jpeg/${OHOS_ARCH}/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libpng/${OHOS_ARCH}/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/googletest/${OHOS_ARCH}/include)

2.1.3  测试第三方库

三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境

进入到构建目录(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录),执行如下操作步骤:

  • 配置环境变量 执行如下命令:

export LD_LIBRARY_PATH=${LYCIUM_ROOT}/usr/libyuv/${ARCH}/lib:${LYCIUM_ROOT}/usr/libavif/${ARCH}/lib:${LYCIUM_ROOT}/usr/jpeg/${ARCH}/lib:${LYCIUM_ROOT}/usr/libaom/${ARCH}/lib:${LYCIUM_ROOT}/usr/libpng/${ARCH}/lib:$LD_LIBRARY_PATH

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。

  • 执行测试项:

ctest

 

实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧 

【HarmonyOS】如何读取rawfile里面的自定义文件 我们可以通过@ohos.resourceManager(资源管理)模块中的getRawFileContent获取resources/rawfile目录下对应的文件内容,得到一个字节数组。我们知道rawfile文件夹内可以自由放置各类资源文件,如html、json等,那么我们在页面中如何解析引用我们自定义的这些文件呢?这篇文章将为大家揭开谜底~1、在resources/rawfile目录下自定义一个json文件data.json和test.html。2、代码及debug效果。 阅读详情

相关推荐

解决痛点!鸿蒙资源管理开发常见问题

解决措施使用ResourceManager模块的getStringValue方法获取。

2401_82546228的博客 1507

HarmonyOS对各种图片编解码格式的支持

hongxiaomeng的博客 469

HarmonyOS 开发实践——对各种图片编解码格式的支持

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。

liuhaojiabin的博客 741

鸿蒙(HarmonyOS)性能优化实战-Swiper高性能开发

Swiper 组件的预加载机制与 LazyForEach 结合使用,能够达到最佳优化效果。预加载的 cachedCount 并非越大越好,需要结合单个子组件加载耗时来设置。假设一个子组件的加载耗时为 Nms,那么 cachedCount 推荐设置为小于 400/N。如果应用有非常高的性能优化需求,Swiper 预加载机制可搭配 OnAnimationStart 接口回调使用,进一步提升预加载的效率。码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些。

maniuT的博客 2127

【鸿蒙实战开发】HarmonyOS对各种图片编解码格式的支持

ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。2.1 将libavif库添加到工程中,参考链接: libavif三方库说明。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。10.后台任务(Background Task)管理。编译环境的搭建参考 准备三方库构建环境。

CTrup的博客 1397

鸿蒙(HarmonyOS)实战开发篇——对各种图片编解码格式的支持

拷贝动态库到\entry\libs${OHOS_ARCH}\目录: 动态库需要在\entry\libs${OHOS_ARCH}\目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录

lc748258的博客 1123

鸿蒙开发5.0案例分析:图片编解码进阶指南

系统原生图片处理 展示了鸿蒙系统对JPG等格式的原生支持,通过ResourceManager获取图片资源并转换为PixelMap的核心代码流程。 第三方图片格式集成 详细解析了AVIF格式支持的实现方案: 从源码编译libavif库的完整步骤 工程集成方法(库文件部署、CMake配置) 测试验证流程与环境配置 提供HEIF/AVIF等新格式的兼容方案,通过C++层解码后返回PixelMap数据

2501_91726121的博客 809

鸿蒙5.0实战案例:HarmonyOS对各种图片编解码格式的支持

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。

Maniu_666的博客 1047

HarmonyOS 实战开发 —— 对各种图片编解码格式的支持

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。

CTrup的博客 1031

Flutter在鸿蒙系统中的网络图片加载优化实践

网络图片加载是移动应用开发中的常见需求,涉及缓存策略、内存管理和线程调度等技术难点。在跨平台开发场景下,Flutter框架通过其分层架构和平台通道机制,实现了高效的图片加载解决方案。鸿蒙系统(HarmonyOS)作为新兴的国产操作系统,其分布式能力和全场景适配特性为网络图片加载带来了新的优化可能。本文探讨了如何利用Flutter的图片加载体系,结合鸿蒙平台的特性,实现高性能的网络图片加载方案,包括缓存策略设计、线程模型优化以及鸿蒙特有功能的集成。通过实际项目验证,该方案在保持跨平台一致性的同时,充分发挥了鸿

weixin_34160277的博客 2526

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 295

鸿蒙OH实战开发:HarmonyOS对各种图片编解码格式的支持

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。

pengjiadashaoye的博客 644

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

鸿蒙开发实战 (API 12 Beta5版)各种图片编解码格式的支持

实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。

2401_84917132的博客 1677

文石NoteX3国行版安装 Google Play经验分享

文石NoteX3国行版安装 Google Play经验分享。

2301_80693261的博客 7589

OCV/AOCV/SOCV的介绍和应用

library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的。,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布,在STA中用OCV来模拟这一『特征』。OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化。,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化。优点:设置起来比较简单粗暴,对于不那么先进的工艺可行!的影响,更贴合实际。

m0_61003348的博客 8978

鸿蒙开发5.0案例分析:HarmonyOS对各种图片编解码格式的支持

注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。

2501_91726121的博客 641

同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

来源:雪球App,作者: 同花顺-iFinD,(https://xueqiu.com/6706494343/141951051)金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够...

weixin_35911805的博客 2万+
上一篇: 鸿蒙开发实践——基于自定义注解和代码生成实现路由框架
下一篇: 鸿蒙开发实践——基于C++能力的资源访问
猫猫码代码
博客等级 码龄6年 421粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值