绘制一定角度的线性渐变

Draw linear gradient at a certain angle

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

谁能告诉我如何做对?

谢谢!

猜测 Pixman 以与 Cairo 相同的方式实现线性渐变,因为 Cairo 的图像后端使用 Pixman,因此请查看 Cairo 的一些文档。例如,在 "Drawing with Cairo" 部分的 http://www.cairographics.org/tutorial/ 中,"Preparing and Selecting a Source" 小节中有对线性渐变的解释。

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

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

P.S.: 不,我不知道 CSS.

中如何指定带有角度的渐变