java如何为heat / temp设置垂直gradientpaint

时间:2013-11-11 14:41:35

标签: java gradient

您好我正在尝试用温度填充矩形(300,30)。

与下面的任一竖条一样。

我在尝试:

GradientPaint gp2 = new GradientPaint(0, 0, 
                      Color.RED, 0, 300, Color.YELLOW, true);

我不明白文档中的Point1到Point2部分。

这些点是什么?如何找到填充矩形或GradientPainting Panel的背景?

enter image description here

enter image description here

1 个答案:

答案 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/

请看这张图片:enter image description here

小方块是A,小方块是B.现在如果我将A和B向上移动相同的距离会发生什么?我们称这些新点为A'和B'。 A和B'仍将定义水平线。渐变将完全相同。当我说解决方案不是唯一的时候,这就是我的意思。实际上,有无数个点会给你相同的渐变(当然,实际上这个数字受到屏幕上像素数量的限制)。

然后问题可能是:如何选择A和B?答案是:对你来说更方便。一个小小的食谱只是为了使概念清晰:

  • 垂直梯度:A =(x,y); B =(x,y + deltaY)。其中deltaY是颜色变化的区域的高度。无论是什么y,渐变都是一样的。
  • 水平梯度:A =(x,y); B =(x + deltaX,y)。其中deltaX是颜色变化的区域的宽度。无论是什么y,渐变都是一样的。
  • 对角线梯度,45度:A =(x,y); B =(x + delta,y + delta)。其中delta是正方形的一侧,其对角线是颜色变化的线。

在上面的最后一项中,x和y都很重要,但仍然不是唯一的。如果进行以下变换,则可以获得相同的梯度:A =(x + noise,y - noise); B =(x + delta + noise,y + delta - noise),其中noise是任意整数。

如果解释仍然不清楚,请告诉我,我可以再试一次。