【问题标题】:drawing layers using java graphics API使用 java 图形 API 绘制图层
【发布时间】:2011-05-25 08:28:25
【问题描述】:

我正在做一个模拟器项目,测试几种基于 A* 的算法并展示它们的工作原理和结果。 这些算法都是多智能体并在网格地图环境中运行。

我为网格使用了 JPanel,其中包含一个二维单元格数组,其中每个单元格都是一个自定义类,它扩展了 Component 类并使用paint方法在每个单元格中绘制我需要的东西。 对于单元格内的绘图,我使用 Graphics.fillRect 或 Graphics.drawImage 等方法为每个单元格填充某种颜色或图标)。

我为网格上每个代理的起始位置和目标位置使用了一个特殊的图标。 我的问题是我希望能够在同一个单元格上绘制多个项目。

例如,我希望能够通过以特殊颜色沿路径绘制单元格来显示其中一个代理的路径,并且路径可能会通过不同代理的起始位置,所以我希望能够用颜色填充单元格并在顶部绘制一个图标。 在另一个示例中,我希望能够使用 alpha 混合来混合两种颜色。

如果我使用具有 alpha 的一种颜色的 graphics.fillRect(),然后再次使用具有 alpha 值的不同颜色,它将不起作用,因为最后一个 fillRect() 将覆盖第一次调用。

有没有一种方法可以使用我创建的相同单元组件来实现我所需要的,或者我应该以不同的方式实现它? 也许这个问题有更好的解决方案? 我真的很感激任何关于这个问题的建议。

【问题讨论】:

  • 更深入地了解alpha composite 可能会有所帮助。此外,如果您接受和/或投票赞成有用的答案,人们会更加认真地对待您的问题。
  • 完成了,我了解 alpha 合成,但这并不能解决问题。如果你画一个 50% alpha 的矩形,然后再画一个,第二个会覆盖它而不是混合它

标签: java swing graphics layer graphics2d


【解决方案1】:

如果您绘制一个具有 50% alpha 的矩形,然后再绘制另一个,第二个将覆盖它而不是与之混合。

这取决于模式。这个方便的utility 显示了使用AlphaComposite 中定义的模式混合不同颜色的结果。可用的source code 可能会为您的项目提供一些见解。

附录:

我试图合成的东西在同一个 Component 上。

examplecited 正是这样做的,example 也是如此。如果AlphaComposite 不符合您的要求,您可以随时更改色调、饱和度和/或值;这个example 组成了一个基于饱和度的颜色表。

【讨论】:

  • 我尝试使用 alphaComposite 对象,但没有太大帮助,因为我尝试合成的东西在同一个组件上
  • 谢谢,我会试着看看这个例子,看看我能做些什么
猜你喜欢
  • 2020-05-31
  • 2010-11-19
  • 1970-01-01
  • 2017-07-06
  • 2018-02-06
  • 2013-02-18
  • 2015-04-14
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多