我正在尝试使用pixman_image_create_linear_gradient()
函数使用libpixman绘制线性渐变。它可以很好地绘制从左到右和从上到下绘制的渐变,但我不知道如何在特定角度(0-360度)绘制渐变,就像在CSS中可能的那样。例如,旋转45度的线性渐变。
我认为必须使用参数p1
和p2
,因为它们定义了渐变方向,但根本没有文档,我无法弄清楚如何使用这两个用于旋转渐变的参数。
对于垂直渐变,我只需将它们设置为
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个像素的空白区域,所以我一定做错了。
有人能告诉我如何做到这一点吗?
谢谢!
答案 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中指定具有角度的渐变。