【发布时间】:2017-01-01 10:30:50
【问题描述】:
我无法找到解决此问题的方法。 我想在 Java 中绘制一个带有渐变的填充三角形,其中每个角都有不同的颜色。像这样:
我在网上找到了一些帖子,但我无法弄清楚如何在 Java 中进行渐变。问题是在 Java 中你只能从一种颜色到另一种颜色进行 GradientPaint,这不适合填充三角形。
到目前为止,我想出的代码不能按预期工作:
triangle.p1().getValue();
Color color1 = calculateColor(triangle.p1().getValue());
Color color2 = calculateColor(triangle.p2().getValue());
Color color3 = calculateColor(triangle.p3().getValue());
Color transparent = new Color(0, 0, 0, 0);
Polygon polygon = new Polygon(
new int[]{(int) triangle.p1().x(), (int) triangle.p2().x(), (int) triangle.p3().x()},
new int[]{(int) triangle.p1().y(), (int) triangle.p2().y(), (int) triangle.p3().y()},
3);
GradientPaint gradient1 = new GradientPaint(
(float) triangle.p1().x(), (float) triangle.p1().y(), color1,
(float) triangle.p2().x(), (float) triangle.p2().y(), transparent);
GradientPaint gradient2 = new GradientPaint(
(float) triangle.p2().x(), (float) triangle.p2().y(), color2,
(float) triangle.p3().x(), (float) triangle.p3().y(), transparent);
GradientPaint gradient3 = new GradientPaint(
(float) triangle.p3().x(), (float) triangle.p3().y(), color3,
(float) triangle.p1().x(), (float) triangle.p1().y(), transparent);
graphics2d.setPaint(gradient1);
graphics2d.fill(polygon);
graphics2d.setPaint(gradient2);
graphics2d.fill(polygon);
graphics2d.setPaint(gradient3);
graphics2d.fill(polygon);
一些提到类似事情的线程: Triangle Gradient With Core Graphics 和 Java 3 Color Gradient
【问题讨论】:
-
你有什么问题?你有一个很好的解释,甚至是一些示例代码。有没有错误?您的代码(请发布一些)不起作用吗?还是你停留在一个特定的细节上?请具体一点。
-
我更新了问题描述并添加了一些代码。
-
你用这段代码得到的结果是什么,你能添加一个当前结果的截图吗? (我的猜测是它在三角形中间插入白色?)
-
无论如何,感谢陌生人对完全合理的问题投反对票。你是最棒的!
-
好吧,首先我认为你所有的颜色都是绿色的。这意味着如果您想要多种颜色(蓝色和红色),您需要修复第一部分(您调用
calculateColor(triangle.p1().getValue());。其次,您的渐变矢量/方向不正确。现在每个渐变都从一个角指向下一个角三角形边界的方向,而不是指向沿着中值的对边线的中心。它仍然会产生很好的效果,尽管我认为不是你想要的。