1

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

任何人都可以告诉我如何做到这一点吗?

谢谢!

4

1 回答 1

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;

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

于 2016-02-21T15:13:16.703 回答