- 图形学
- 桌面应用
【免费下载链接】RGF_CJ
RGF是仓颉Windows系统下的通用渲染框架(兼应用开发框架)。RGF仓颉版(后续简称"RGF")基于RGF(C/C++版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能力以及常用的桌面应用开发工具,并且提供对接Direct3D的相关接口,以满足开发者对3D画面渲染的需求。在Windows开发方面,RGF在子包内也提供开箱即用的Windows API,确保熟悉Win32的开发者快速上手。此外,RGF还提供一些常用功能的封装(如XAudio2、MF),以辅助开发者实现音频、摄像头等扩展功能的管理。
ColorUtils是 RGF 仓颉版(RGF_CJ)rgf.rgf_utils工具包中专门面向色彩运算的静态工具类,其核心能力是提供色彩线性插值(lerp)方法,让开发者可以在两个Color之间按步值平滑过渡。本文围绕 ColorUtils 官方 API 文档 展开,结合 color.cj 源码 与 Color 类型定义 逐层拆解其参数语义、底层实现与典型应用场景。读完本文,你将掌握 RGF 中色彩插值接口的完整用法,并能在画刷颜色过渡、动画补间等实战中直接落地。
一、ColorUtils在 RGF 工具包中的定位
rgf.rgf_utils是 RGF 的通用工具子包,内部集中了不依赖具体渲染设备、可被其他模块复用的辅助能力。根据 包 readme,该包除ColorUtils外还包含定时器RTimer、矩形运算RectUtils、安全接管泛型类Safe<T>、缓动函数计算类Tween等工具类。
其中ColorUtils的职责非常单一:只做色彩运算,不涉及任何窗口、画刷或渲染状态。它被声明为:
public class ColorUtils源码中该类通过private init(){}隐藏了构造函数(见 color.cj),即不允许实例化,所有能力都以static方法对外暴露——这决定了它的使用方式:ColorUtils.方法名(...)直接调用,无需创建对象。这与同包中Tween、RectUtils的设计思路一致,都属于"纯函数工具类"。
二、核心 API:lerp色彩线性插值
ColorUtils目前对外暴露的唯一公开方法即色彩线性插值:
public static func lerp(color1: Color, color2: Color, t: Float32): Color参数说明
| 名称 | 类型 | 描述 |
|---|---|---|
color1 | Color | 插值的起始色彩 1 |
color2 | Color | 插值的目标色彩 2 |
t | Float32 | 插值步值,取值范围[0, 1] |
返回值
- 返回一个
Color类型的新色彩对象,即color1与color2按步值t插值后的结果。
语义理解
lerp(Linear Interpolation,线性插值)的直观含义是:t = 0.0时返回color1本身,t = 1.0时返回color2本身,t介于两者之间时返回一条"从color1渐变到color2"的过渡色。例如在color1 = 红色、color2 = 蓝色的前提下,t = 0.5会得到红蓝之间的中间色。
三、源码级实现原理
lerp的完整实现位于 color.cj:
public static func lerp(color1:Color, color2:Color, t:Float32):Color { // 确保 t 在 [0, 1] 范围内 let tmpv = min(max(t, 0.0), 1.0); return Color( color1.r + (color2.r - color1.r) * t, color1.g + (color2.g - color1.g) * t, color1.b + (color2.b - color1.b) * t, color1.a + (color2.a - color1.a) * t ); }从源码可以看出三个关键实现细节:
步值钳制(Clamp):实现先通过
min(max(t, 0.0), 1.0)将传入的t钳制到[0, 1]区间。这意味着即使调用方误传了负数或大于 1 的值,结果也不会出现"越界"的异常色彩,体现了工具类对输入的防御性处理。逐通道独立插值:插值公式
color1.r + (color2.r - color1.r) * t分别作用于 R、G、B、A 四个通道。由于Color的四个分量都是Float32(见 Color 类型定义),插值计算全程为浮点运算,避免了整数通道插值时可能出现的截断误差。构造新对象返回:方法返回一个全新的
Color实例,不会修改传入的color1、color2,因此可以在循环或动画帧中安全复用两个端点颜色,无副作用。
顺带一提,Color 类型 同时提供了UInt8通道的构造重载(r,g,b,a各取0~255,内部除以 255.0 归一化),因此在调用lerp前既可以用浮点构造端点颜色,也可以用经典的 0-255 整数方式构造。
四、实战:从插值到画刷与动画
ColorUtils.lerp本身不依赖渲染环境,但它的产出Color可以直接接入 RGF 的绘制体系——RGF 中几乎所有与颜色相关的设备资源都接受Color对象。
1. 与纯色画刷配合:动态改变画刷颜色
在 RGF 中,纯色画刷SolidColorBrush提供setColor(color:Color)重载(见 rgf_brush_solid_color.cj),它内部会拆出r,g,b,a调用底层 APIrApiSolidBrhClassSetColor(声明见 rgf_api.cj)。于是可以在渲染循环中用lerp生成过渡色并实时写入画刷:
// 红色 -> 蓝色 线性过渡 let startColor = Color(1.0, 0.0, 0.0, 1.0) let endColor = Color(0.0, 0.0, 1.0, 1.0) let current = ColorUtils.lerp(startColor, endColor, t) // t 由进度驱动 brush.setColor(current) surface.fillRectangle(rect, brush)2. 与 Tween 配合:构建缓动色彩动画
ColorUtils.lerp提供的线性插值与工具包中的 Tween 缓动类 天然互补:先用Tween的各类缓动函数(linear、inOutCubic、outBack等)对时间进度做曲线变换,再把变换后的值作为t传入lerp,即可得到非线性的色彩过渡动画——例如"先加速后减速"的颜色渐变:
let eased = Tween.inOutCubic(progress, 0.0, 1.0) // progress ∈ [0,1] let color = ColorUtils.lerp(startColor, endColor, eased)3. 渐变画刷的静态过渡参考
RGF 的线性渐变画刷LinearGradientBrush在创建时接受起始色与结束色(见课程文档 012_使用渐变画刷),其效果本质上也是颜色在空间上的连续过渡;而lerp解决的则是时间维度上的过渡,两者组合使用可以构建"渐变画刷 + 整体色调动画"的复合效果。
五、使用注意事项
t的语义:虽然实现内部会钳制t,但业务上仍应保证t在[0, 1]内推进,否则插值结果与直觉不符(钳制后效果等同端点色)。- 透明通道参与插值:
lerp对 Alpha 通道同样插值,因此可以用于实现淡入淡出(color1.a = 0.0→color2.a = 1.0),这是很多开发者容易忽略的能力。 - 性能友好:实现为纯计算、无外部资源分配之外的对象创建,适合在
onPaint等高频回调中逐帧调用。 - 不修改端点:传入的
color1、color2不会被改动,可安全复用。
六、相关资源导航
- 官方 API 文档:ColorUtils.md(本文主体依据)
- 工具包总览:rgf.rgf_utils readme
- 源码实现:color.cj
- 颜色类型定义:rgf_struct.cj 中的 Color 类
- 纯色画刷颜色设置:rgf_brush_solid_color.cj
- 缓动函数工具类:tween.cj
- 相关课程:005_使用纯色画刷、012_使用渐变画刷
- 图形学
- 桌面应用
【免费下载链接】RGF_CJ
RGF是仓颉Windows系统下的通用渲染框架(兼应用开发框架)。RGF仓颉版(后续简称"RGF")基于RGF(C/C++版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能力以及常用的桌面应用开发工具,并且提供对接Direct3D的相关接口,以满足开发者对3D画面渲染的需求。在Windows开发方面,RGF在子包内也提供开箱即用的Windows API,确保熟悉Win32的开发者快速上手。此外,RGF还提供一些常用功能的封装(如XAudio2、MF),以辅助开发者实现音频、摄像头等扩展功能的管理。
相关推荐
SFTPGo插件系统指南:用Go开发自定义认证、通知和IP过滤插件(附示例代码)
SFTPGo插件系统指南:用Go开发自定义认证、通知和IP过滤插件(附示例代码) SFTPGo 插件系统让这款支持 SFTP、FTP/S、WebDAV、HTTP
图形学桌面应用RGF仓颉版 Color 类完全解析:从 0~255 到 0.0~1.0 的色彩值体系及其在渲染中的落地
RGF仓颉版 Color 类完全解析:从 0~255 到 0.0~1.0 的色彩值体系及其在渲染中的落地 本篇聚焦 RGF仓颉版(RGF_CJ)核心包 rgf.
图形学桌面应用RGF 仓颉版 SolidColorBrush 纯色画刷:API 详解与渲染实战指南
RGF 仓颉版 SolidColorBrush 纯色画刷:API 详解与渲染实战指南 SolidColorBrush(纯色画刷)是 RGF 仓颉版(RGF_CJ
图形学桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考