0

嗨,我正在尝试用温度填充一个矩形 (300,30)。

就像下面的垂直条一样。

我在尝试:

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

我不理解文档中的 Point1 到 Point2 部分。

这些点是什么?我如何找到它们来填充矩形或 GradientPainting 面板的背景?

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

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 之前和 B 之后的点将分别具有 A 和 B 的颜色。看图:

( color of A )(color between A and B)( color of B)
-------------A-----------------------B------------

那么平面上所有其他点的颜色呢?假设 D 不在 A 到 B 的直线上。首先你需要找到 D 在 A 到 B 的直线上的投影。假设投影是点 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-墨景/

看看这张图片:在此处输入图像描述

小正方形是 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 + 噪声,y - 噪声); B = (x + delta + 噪声,y + delta - 噪声),其中噪声是任意整数。

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

于 2013-11-11T15:36:20.340 回答