以某个角度绘制线性渐变

时间:2016-02-21 14:05:58

标签: 2d cairo pixman

我正在尝试使用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个像素的空白区域,所以我一定做错了。

有人能告诉我如何做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

猜测 Pixman以与Cairo相同的方式实现线性渐变,因为Cairo的图像后端使用了Pixman,所以看看开罗的一些文档。例如,在“使用开罗绘图”部分的http://www.cairographics.org/tutorial/中,“准备和选择源”小节中有线性渐变的解释。

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

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

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