您好我正在尝试用温度填充矩形(300,30)。
与下面的任一竖条一样。
我在尝试:
GradientPaint gp2 = new GradientPaint(0, 0,
Color.RED, 0, 300, Color.YELLOW, true);
我不明白文档中的Point1到Point2部分。
这些点是什么?如何找到填充矩形或GradientPainting Panel的背景?
答案 0 :(得分:2)
渐变涂料使用2个点及其各自的颜色。它的工作原理与Inkscape中的渐变工具完全相同。
让我们说这些点是A和B.现在想象一条从A到B的线。这条线的点的颜色范围从A的颜色到B的颜色。顺便说一句,它们的线性范围。
如果A是黑色(0,0,0)而B是白色(255,255,255),那么从A到B的一半点将具有其颜色(127,127,127),因为127 = (0 + 255)/ 2(整数)。
A之前和之后的点将分别具有A和B的颜色。见图:
( color of A )(color between A and B)( color of B)
-------------A-----------------------B------------
现在飞机上所有其他点的颜色怎么样?假设D不在A到B的线上。首先你需要在A到B的线上找到D的投影。假设投影是E点。如果E在A和B之间,D的颜色将是是使用线性范围的E的颜色。
这是它的工作原理。现在,似乎你需要做一些比这更复杂的事情。您需要创建自己的方法来计算每个像素的颜色。标准Java2D无法帮助您。
也许你的困惑来自A和B不是唯一的事实。用语言很难解释,但我会尝试。困惑是因为我们并不需要两个点来定义渐变。我们可以简单地给出渐变原点(点A),角度和长度,直到颜色变为第二种颜色。想象一下应用于A点的距离向量。但是,我们不要用抽象的术语来思考,也不要用事情来思考。我们只是解决您的问题。
Java2D中的渐变绘画作为Inkscape中的线性痛苦:http://vector.tutsplus.com/tutorials/tools-tips/quick-tip-how-to-create-gradient-fills-and-on-stroke-in-inkscape/
请看这张图片:
小方块是A,小方块是B.现在如果我将A和B向上移动相同的距离会发生什么?我们称这些新点为A'和B'。 A和B'仍将定义水平线。渐变将完全相同。当我说解决方案不是唯一的时候,这就是我的意思。实际上,有无数个点会给你相同的渐变(当然,实际上这个数字受到屏幕上像素数量的限制)。
然后问题可能是:如何选择A和B?答案是:对你来说更方便。一个小小的食谱只是为了使概念清晰:
在上面的最后一项中,x和y都很重要,但仍然不是唯一的。如果进行以下变换,则可以获得相同的梯度:A =(x + noise,y - noise); B =(x + delta + noise,y + delta - noise),其中noise是任意整数。
如果解释仍然不清楚,请告诉我,我可以再试一次。