可可图片编辑 HarmonyOS(5)滤镜效果

可可图片编辑 HarmonyOS(5)滤镜效果

前言

可可图片编辑也实现了滤镜效果,主要是利用 Image组件的 colorFilter 属性实现。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

滤镜的关键属性 colorFilter

colorFilter 的主要作用是给图像设置颜色滤镜效果。

其核心原理是使用一个 4x5 的颜色矩阵 对图片的每个像素颜色(RGBA)进行数学变换,从而得到一个新的颜色值。

参数类型:

它接受两种类型的参数:

  1. ColorFilter: ArkUI 自带的颜色滤镜对象,主要通过传递一个 4x5 的矩阵数组来使用。

  2. DrawingColorFilter: 来自 @kit.ArkGraphics2D

    绘图模块的、功能更丰富的颜色滤镜对象,提供了多种静态创建方法(如混合模式、矩阵、光照等)。

使用方法 1 :使用 ColorFilter 和 4x5 颜色矩阵

这是最基础和最灵活的方式。你需要构造一个包含 20 个数字的数组来表示一个 4x5 的矩阵。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

1. 矩阵计算规则

矩阵结构如下,它会对每个像素的原始颜色 [R, G, B, A] 进行运算:

输出颜色 [R', G', B', A'] 的计算公式为:

重要提示:计算时,原始颜色值(R,G,B,A)需要先归一化(Normalize)到 0.0, 1.0 的浮点数范围(1.0 对应 255)。

示例代码:

后续的效果都可以在当前示例代码上进行修改

2. 常用矩阵示例

a) 原图效果(单位矩阵) 保持图片原有色彩,不对其做任何改变。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

b) 灰度效果 将图片转换为黑白灰度图。常见的权重公式是 0.299*R + 0.587*G + 0.114*B

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

c) 颜色反转(负片效果) 将每个颜色通道取反。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

d) 纯色着色(文档中的核心方案) 忽略原图颜色 ,将其渲染为指定的目标颜色(例如 #4f0f48db)。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区
  • 将 RGB 通道的前四列系数设为 0,完全丢弃原图颜色信息。
  • 将 RGB 通道的第五列设置为目标颜色归一化后的。
  • Alpha 通道通常保持不变。

假设目标色为 #4f0f48db,其归一化后的值为:

  • A = 0.31 (79/255)
  • R = 0.06 (15/255)
  • G = 0.28 (72/255)
  • B = 0.86 (219/255)

对应的矩阵为:


e) 棕褐色怀旧效果 (Sepia) ,这是一种经典的老照片效果,为图像添加温暖的棕褐色调。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

f) 亮度调节,整体提升或降低图像的亮度。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

g) 冷色调/暖色调 通过微调不同颜色通道的增益,营造冷暖感觉.

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

使用方法 2 :使用 DrawingColorFilter(推荐,更简单)

通过 '@kit.ArkGraphics2D' 模块提供的多种静态方法创建滤镜,这种方式通常更简洁易懂。

1. 导入模块

2. 使用预置方法创建滤镜

a) 创建混合模式滤镜 (createBlendModeColorFilter)

使用指定的颜色和混合模式(如 BlendMode.SRC_IN)进行混合,非常适合着色。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

b) 直接通过矩阵创建 (createMatrixColorFilter)

与原生 ColorFilter 类似,但使用 drawing 模块的接口。

可可图片编辑 HarmonyOS(5)滤镜效果-鸿蒙开发者社区

注意事项

性能:颜色滤镜的运算发生在渲染时,对于大图或频繁操作,可能会有性能开销。建议对处理后的结果进行缓存。

Alpha 通道:在处理透明度时务必小心,错误的矩阵设置可能导致图片完全透明或出现非预期的半透明效果。

对于简单的颜色覆盖/着色,优先推荐使用 drawing.ColorFilter.createBlendModeColorFilter,它的代码更简洁,意图更

清晰。对于复杂的颜色变换(如复古、色调分离等),再考虑使用自定义矩阵。

以往文章

相关推荐
Fluxart.ai1 天前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术1 天前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码1 天前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep1 天前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen1 天前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
IT_陈寒1 天前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端
hunterandroid1 天前
[Android 从零到一] Compose LazyColumn 性能优化:key、稳定性与重组治理
android·前端
lichenyang4531 天前
从一次团队邀请开始:用 React、NestJS 与 Socket.IO 做可靠的实时通知
前端
vtian1 天前
一篇文章吃透 Monorepo:pnpm + Turborepo + Changesets 全流程实战(含 8 个踩坑)
前端
默_笙1 天前
❗ 点击计数按钮,为什么"峨眉队"也跟着重新渲染?React.memo 说:我记住了
前端·javascript