【问题标题】:Draw linear gradient at a certain angle绘制一定角度的线性渐变
【发布时间】:2016-02-21 14:05:57
【问题描述】:

我正在尝试使用 pixman_image_create_linear_gradient() 函数通过 libpixman 绘制线性渐变。它适用于绘制从左到右和从上到下运行的渐变,但我不知道如何以特定角度(0-360 度)绘制渐变,就像在 CSS 中可能的那样。例如,旋转 45 度的线性渐变。

我认为必须为此使用参数p1p2,因为它们定义了渐变方向,但根本没有文档,我真的不知道如何使用这两个参数来旋转渐变。

对于垂直渐变,我只需将它们设置为

p1.x = 0; p1.y = 0;
p2.x = 0; p2.y = height - 1;

对于水平渐变我使用

p1.x = 0; p1.y = 0;
p2.x = width - 1; p2.y = 0;

但是我应该使用哪些值来进行任意旋转?简单地对点应用 2D 旋转矩阵看起来不正确,例如当绘制 640x480 的渐变并将其旋转 45 度时,我最终得到了点

p1.x = 81; p1.y = 560;
p2.x = 559; p2.y = 559;

它以正确的方向绘制渐变,但渐变的两侧大约有 80 个像素的空白空间,所以我一定是做错了什么。

谁能告诉我如何解决这个问题?

谢谢!

【问题讨论】:

    标签: 2d cairo pixman


    【解决方案1】:

    Pixman 以与 Cairo 相同的方式实现线性渐变,因为 Cairo 的图像后端使用 Pixman,因此请查看 Cairo 的一些文档。例如,http://www.cairographics.org/tutorial/ 在“使用 Cairo 绘图”部分的“准备和选择源”小节中对线性渐变进行了说明。

    对于您的 45 度旋转,我会尝试以下操作(左上角一个点,右下角另一个点):

    p1.x = 0; p1.y = 0;
    p2.x = width - 1; p2.y = height - 1;
    

    P.S.:不,我不知道 CSS 中如何指定带角度的渐变。

    【讨论】:

    • 对,好像真的一样。我现在可以工作了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多