我正在使用 AS3 (Flash)读取 SVG 文件并显示它们。问题是正确显示线性/径向渐变。
以下是SVG 中从Red到Blue的简单线性渐变示例。
<linearGradient id="GRADIENT_1" gradientUnits="userSpaceOnUse"
x1="107.3938" y1="515.5684" x2="105.2488" y2="428.8614"
gradientTransform="matrix(0.9988 0.0485 0.0485 -0.9988 0.8489 711.6634)">
<stop offset="0" style="stop-color:red"/>
<stop offset="1" style="stop-color:blue"/>
</linearGradient>
我已经能够从渐变中读取颜色(stop 的样式),以及它们在渐变中的间距(stop 的偏移量)。
好的,所以现在我有了一个很好的渐变,颜色正确,它们之间的空间量也恰到好处,但没有旋转或缩放,而且它的位置不正确!.
答案是将矩阵输入到 Flash 的渐变函数中。
方法 1:使用提供的矩阵
SVG提供的矩阵, gradientTransform="matrix(a,b,c,d,e,f)"似乎实际上没有用,因为当您将该矩阵输入 Flash 的beginGradientFill() 函数时,它会显示在形状上拉伸的渐变如此之多,以至于只有渐变的中心颜色可见,就像实心填充一样。
方法 2:使用 2 个梯度点生成矩阵
- x1, y1标签可能是屏幕上渐变开始的点。
- x2、y2标签可能是屏幕上渐变结束的点。
当我说“2 个渐变点”时,我指的是 x1,y1 和 x2,y2,它们主要告诉您渐变在形状上的哪个位置开始和结束。
有一个Matrix.createGradientBox()函数,它创建一个用于渐变的矩阵,但参数与 SVG给我的参数非常不同。它想要:
- 宽度--- 这里使用了 2 个渐变点之间的相对距离(X 轴)
- 高度 --- 这里使用了 2 个渐变点之间的相对距离(Y 轴),但得到了不正确的结果--- 也尝试了这里使用2 个渐变点之间的距离,但我不知道在宽度中填充什么!
- 旋转角度——使用了 2 个渐变点的角度,以弧度为单位,结果不正确!
- 翻译 x -- 尝试了第一个梯度点的 X,也尝试了 0,结果不正确!
- 平移 y -- 尝试了第一个梯度点的 Y,也尝试了 0,但结果不正确!
我可以使用哪些 SVG 数据为 Flash 生成渐变矩阵?
(看看上面的 SVG 片段,这就是我描述渐变的所有数据)