I have a 2D bitmap-like array of let's say 500*500 values. I'm trying to create a linear gradient on the array, so the resulting bitmap would look something like this (in grayscale):
![Example gradient](https://i.stack.imgur.com/Zdn9Q.jpg)
(source: showandtell-graphics.com http://showandtell-graphics.com/images/gradient/gradient_12.jpg)
输入将是要填充的数组、两个点(如 Photoshop/GIMP 中渐变工具的起点和终点)以及将使用的值范围。
我目前最好的结果是这样的:
替代文本http://img222.imageshack.us/img222/1733/gradientfe3.png http://img222.imageshack.us/img222/1733/gradientfe3.png
...这离我想要实现的目标相去甚远。它看起来更像是径向渐变。
创建这种渐变的最简单方法是什么?我将用 C++ 实现它,但我想要一些通用算法。
这确实是一个数学问题,因此它是否真的“属于”Stack Overflow 可能存在争议,但无论如何:您需要将图像中每个点的坐标投影到渐变的轴上,并使用该坐标来确定颜色。
从数学上来说,我的意思是:
- 假设您的起点是 (x1, y1),终点是 (x2, y2)
- Compute
A = (x2 - x1)
and B = (y2 - y1)
- 计算
C1 = A * x1 + B * y1
为起点和C2 = A * x2 + B * y2
为终点 (C2
应该大于C1
)
- 对于图像中的每个点,计算
C = A * x + B * y
-
If C <= C1
,使用起始颜色;如果C >= C2
,使用结束颜色;否则,使用加权平均值:
(start_color * (C2 - C) + end_color * (C - C1))/(C2 - C1)
我做了一些快速测试来检查这是否基本上有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)