0. 简介
0.1 Fill
Fill
是一个抽象类,表示形状对象的渐变填充。它包含有关渐变颜色及其在渐变范围内的排列方式的信息。渐变范围在线性渐变或径向渐变类中定义,具体取决于要使用的渐变类型。它指定了渐变边界定义的区域小于要填充的区域时的渐变行为。
0.2
0.3
1. 类
1.1 Fill
成员函数
Result colorStops(const ColorStop* colorStops, uint32_t cnt) noexcept
:设置渐变颜色及其位置的参数。- 使用方法:传入一个
ColorStop
数组以及数组的长度,表示颜色及其相对位置。 - 注意事项:确保传入的颜色停止点按照位置从小到大排序。
- 使用方法:传入一个
Result spread(FillSpread s) noexcept
:设置渐变范围外部填充区域的填充方式。- 使用方法:传入一个
FillSpread
枚举值,指定填充方式。 - 注意事项:填充方式包括
Pad
、Reflect
和Repeat
,具体含义取决于枚举值的定义。
- 使用方法:传入一个
Result transform(const Matrix& m) noexcept
:设置渐变填充的仿射变换矩阵。- 使用方法:传入一个 3x3 的增广矩阵 m。
- 注意事项:确保传入的矩阵是有效的仿射变换矩阵。
uint32_t colorStops(const ColorStop** colorStops) const noexcept
:获取渐变的颜色、位置和数量的参数。- 使用方法:传入一个
ColorStop
指针的指针,用于存储颜色停止点数组。 - 返回值:返回颜色的数量,对应于
colorStops
数组的长度。
- 使用方法:传入一个
FillSpread spread() const noexcept
:获取填充范围外部的填充方式。- 使用方法:直接调用该函数。
- 返回值:返回一个
FillSpread
枚举值,表示填充方式。
Matrix transform() const noexcept
描述:获取渐变填充的仿射变换矩阵。- 使用方法:直接调用该函数。
- 返回值:返回一个
Matrix
对象,表示仿射变换矩阵。
Fill* duplicate() const noexcept
:创建Fill
对象的副本。- 使用方法:直接调用该函数。
- 返回值:返回一个新创建的 Fill 对象,其属性与原始对象相同,如果失败则返回
nullptr
。
uint32_t identifier() const noexcept
:返回Fill
实例的唯一标识符值。- 使用方法:通常用于检查当前具体实例的类型。
- 返回值:返回
Fill
实例的类型标识符。
1.2 RadialGradient
成员函数
RadialGradient
是一个表示形状对象的径向渐变填充的类是Fill
的子类。
使用场景:
当需要在形状对象上应用径向渐变填充时,可以使用此类。例如,绘制一个圆形或椭圆形,并使用径向渐变填充来创建立体效果或渐变色效果。
成员函数:
Result radial(float cx, float cy, float radius) noexcept
:设置径向渐变的边界。- 参数:
cx
:圆心的水平坐标。cy
:圆心的垂直坐标。
-radius
:圆的半径。
- 返回值:成功时返回
Result::Success
,如果radius
值为零或更小,则返回Result::InvalidArguments
。 - 注意事项:确保提供的半径值大于零。
- 参数:
Result radial(float* cx, float* cy, float* radius) const noexcept
:获取径向渐变的边界。- 参数:
cx
:圆心的水平坐标(输出参数)。cy
:圆心的垂直坐标(输出参数)。radius
:圆的半径(输出参数)。
- 返回值:成功时返回
Result::Success
。 - 注意事项:确保传入非空指针,以便将获取的值写入。
- 参数:
static std::unique_ptr<RadialGradient> gen() noexcept
:创建一个新的RadialGradient
对象。- 返回值:返回一个指向
RadialGradient
对象的std::unique_ptr
。 - 注意事项:调用此函数创建
RadialGradient
对象。
- 返回值:返回一个指向
- static uint32_t identifier() noexcept`能:返回此类的唯一 id 值。
- 返回值:
RadialGradient
类型的类型id
。 - 注意事项:可以用于识别
RadialGradient
类型。
- 返回值:
1.3 LinearGradient
类成员函数
LinearGradient
表示形状对象的线性渐变填充的类,是Fill
的子类。
成员函数:
Result linear(float x1, float y1, float x2, float y2) noexcept
:设置线性渐变的边界。- 参数:
x1
:第一个点的水平坐标。y1
:第一个点的垂直坐标。x2
:第二个点的水平坐标。y2
:第二个点的垂直坐标。
- 返回值:成功时返回 Result::Success。
- 注意事项:确保提供的点不相等,否则渐变将无法渲染。
- 参数:
Result linear(float* x1, float* y1, float* x2, float* y2) const noexcept
:获取线性渐变的边界。- 参数:
x1
:第一个点的水平坐标(输出参数)。y1
:第一个点的垂直坐标(输出参数)。x2
:第二个点的水平坐标(输出参数)。y2
:第二个点的垂直坐标(输出参数)。
- 返回值:成功时返回
Result::Success
。 - 注意事项:确保传入非空指针,以便将获取的值写入。
- 参数:
static std::unique_ptr<LinearGradient> gen() noexcept
:创建一个新的 LinearGradient 对象。- 返回值:返回一个指向 LinearGradient 对象的 std::unique_ptr。
- 注意事项:调用此函数创建 LinearGradient 对象。
static uint32_t identifier() noexcept
:返回此类的唯一 id 值。- 返回值:
LinearGradient
类型的类型 id。 - 注意事项:可以用于识别
LinearGradient
类型。
- 返回值:
2.
2.1 FillRule
枚举类型
Winding
填充规则:- 当使用
FillRule::Winding
时,通过以下步骤来确定点是否在形状内部:- 从该点向形状外部的某个位置绘制一条直线。
- 计算直线与形状路径段的交点。
- 如果路径段与直线的交叉点顺时针,则将交点数加一,否则减一。
- 如果最终的交点数不为零,则该点被视为在形状内部。
- 注意事项:通常用于确定具有复杂路径的形状的内部。
- 当使用
EvenOdd
填充规则:- 当使用
FillRule::EvenOdd
时,通过以下步骤来确定点是否在形状内部:- 从该点向形状外部的某个位置绘制一条直线。
- 计算直线与形状路径段的交点。
- 如果交点数是奇数,则该点被视为在形状内部,否则视为在外部。
- 通常用于简单的形状,可以更快速地确定内部和外部。
- 当使用
2.2 FillSpread
枚举类型
FillSpread
枚举指定了在渐变范围之外的区域如何进行填充。
Pad
:使用最近的停止颜色填充剩余区域。Reflect
:在渐变区域之外反射渐变图案,直到填充期望的区域。Repeat
:在渐变区域之外连续重复渐变图案,直到填充期望的区域。
2.2 ColorStop
结构体
ColorStop
被定义在Fill
类中,用于存储渐变颜色及其在渐变范围内的相对位置信息。
/*Quoted from: https://github.com/thorvg/thorvg/blob/main/inc/thorvg.h*/
struct ColorStop
{
float offset; /* 颜色的相对位置,范围在 0 到 1 之间。 */
uint8_t r; /* 红色通道的值,范围在 0 到 255 之间。 */
uint8_t g; /* 绿色通道的值,范围在 0 到 255 之间。 */
uint8_t b; /* 蓝色通道的值,范围在 0 到 255 之间。 */
uint8_t a; /* Alpha 通道的值,范围在 0 到 255 之间,其中 0 表示完全透明,255 表示完全不透明。 */
};
- 使用方法:
- 创建
ColorStop
对象并设置成员变量的值,表示一个颜色及其相对位置。 - 将
ColorStop
对象添加到渐变的颜色停止点数组中,以便在渐变中使用。
- 创建