| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 2 个月前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 6 个月前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 |
基于TaskPool实现图片编辑功能
简介
本示例基于TaskPool多线程并发方案,实现图片编辑功能,包含图片裁剪、图片旋转、色域调节(亮度、透明度、饱和度)、图片重置,图片保存功能,开发者使用TaskPool线程接口,把任务方法、参数传入execute接口,系统会自动根据任务量进行扩容及缩容,进行线程调度,提升代码运行效率,降低任务运行耗时。
效果预览

工程目录
├──entry/src/main/ets // 代码区
│ ├──common
│ │ └──constant
│ │ └──CommonConstants.ets // 公共常量类
│ ├──entryability
│ │ └──EntryAbility.ets // 本地启动ability
│ ├──pages
│ │ └──HomePage.ets // 本地主页面
│ ├──utils
│ │ ├──AdjustUtil.ts // 调节工具类
│ │ ├──CropUtil.ets // 裁剪工具类
│ │ ├──DecodeUtil.ets // 解码工具类
│ │ ├──EncodeUtil.ets // 编码工具类
│ │ └──OpacityUtil.ets // 透明度调节工具类
│ ├──view
│ │ ├──AdjustContentView.ets // 色域调整视图
│ │ ├──CommBackgroundIcon.ets // 公共带背景色icon
│ │ ├──newBuffer1.ets
│ │ ├──TitleBar.ets // 顶部工具栏
│ │ └──WorkerPort.ets
│ └──viewmodel
│ ├──IconListViewModel.ets // icon数据
│ ├──MessageItem.ets // 多线程封装消息
│ ├──OptionViewModel.ts // 图片处理封装类
│ └──RegionItem.ets // 区域封装类
└──entry/src/main/resources // 资源文件目录
使用说明
- 按照个人需求点击按钮进行裁剪及调节。
- 完成之后可按需保存图片。
- 说明: 当前亮度调节、透明度调节、饱和度调节是在UI层面实现的,未实现细节优化算法,只做简单示例。调节后的图片会有色彩上的失真。
具体实现
- 图片裁剪具体实现步骤:通过pixelMap获取图片尺寸,为后续裁剪做准备。 确定裁剪的方式,当前裁剪默认有原图、1:1、4:3、16:9。 最后通过pixelMap调用接口crop()进行裁剪操作。
- 图片旋转具体实现步骤:确定旋转方向,当前支持顺时针和逆时针旋转。 最后通过pixelMap调用接口rotate()进行旋转操作。
- 亮度调节具体实现步骤:先将pixelMap转换成ArrayBuffer,把生成好的ArrayBuffer发送到worker线程,再计算好的ArrayBuffer发送回主线程。最后把ArrayBuffer写入pixelMap,刷新UI。
- 透明度调节具体实现步骤:先获取pixelMap,再调用接口opacity()进行透明度调节。
- 饱和度调节具体实现步骤:将pixelMap转换成ArrayBuffer,把生成好的ArrayBuffer发送到worker线程,对每一个像素点的饱和度按倍率计算。然后再把计算好的ArrayBuffer发送回主线程。 最后将ArrayBuffer写入pixelMap,刷新UI。
相关权限
- ohos.permission.WRITE_IMAGEVIDEO
约束与限制
- 本示例仅支持标准系统上运行,支持设备:华为手机。
- HarmonyOS系统:HarmonyOS 5.0.5 Release及以上。
- DevEco Studio版本:DevEco Studio 5.0.5 Release及以上。
- HarmonyOS SDK版本:HarmonyOS 5.0.5 Release SDK及以上。