有没有办法沿着对角线填充线性渐变?
Is there a way to fill a linear gradient along a diagonal?
我正在尝试编写代码,用沿该区域的对角线变化的渐变填充矩形区域。我以为我可以按如下方式使用方向参数:
context->GradientFillLinear(
wxrect,
get_wx_colour(gradient.front()),
get_wx_colour(gradient.back()),
wxNORTH | wxEAST);
当我这样做时,编译器将方向子表达式转换为 int 并且由于类型不匹配而无法编译。我怀疑渐变只能水平或垂直填充,这就是为什么编写参数时需要一个枚举值。谁能证实这个怀疑?
从 wxWidget-3.0.2 开始,GradientFillLinear
的实现最终会调用一个具体的实现,看起来有点像:
wxDCImpl::DoGradientFillLinear()
{
...
if ( nDirection == wxEAST || nDirection == wxWEST )
{
...
}
else // nDirection == wxNORTH || nDirection == wxSOUTH
{
...
}
因此,您的怀疑似乎是正确的,即使您在 GradientFillLinear
的论点中确实设法以某种方式将方向强制为 wxNORTH | wxEAST
,实施也不会支持它。
正如 SleuthEye 的正确回答所说,这不能直接完成,但您始终可以应用变换将水平或垂直渐变旋转 45 度。
我正在尝试编写代码,用沿该区域的对角线变化的渐变填充矩形区域。我以为我可以按如下方式使用方向参数:
context->GradientFillLinear(
wxrect,
get_wx_colour(gradient.front()),
get_wx_colour(gradient.back()),
wxNORTH | wxEAST);
当我这样做时,编译器将方向子表达式转换为 int 并且由于类型不匹配而无法编译。我怀疑渐变只能水平或垂直填充,这就是为什么编写参数时需要一个枚举值。谁能证实这个怀疑?
从 wxWidget-3.0.2 开始,GradientFillLinear
的实现最终会调用一个具体的实现,看起来有点像:
wxDCImpl::DoGradientFillLinear()
{
...
if ( nDirection == wxEAST || nDirection == wxWEST )
{
...
}
else // nDirection == wxNORTH || nDirection == wxSOUTH
{
...
}
因此,您的怀疑似乎是正确的,即使您在 GradientFillLinear
的论点中确实设法以某种方式将方向强制为 wxNORTH | wxEAST
,实施也不会支持它。
正如 SleuthEye 的正确回答所说,这不能直接完成,但您始终可以应用变换将水平或垂直渐变旋转 45 度。