在java绘图应用程序中检测由Graphics2d绘制的线及其曲线

时间:2013-02-27 21:22:37

标签: java user-interface detection bufferedimage graphics2d

我正在创建一个音乐应用程序,使您可以从指定的颜色中释放自由线,然后轨迹栏将在其上方传递,并应根据曲线检测曲线和颜色以输出声音和修改的音高等。

我正在寻找的是帮助检测线条和曲线。它们在Label中作为BUfferedImage绘制。以下是截图:

GUI Of drawing/music aplication

我画的黑线代表了轨迹栏,但实际上它是一个由drawRect绘制的矩形,或者它可能是一个图像面板,取决于你检测线条的方式。

我的问题:

  • 我如何检测黄色,绿色等线及其曲线并处理该数据?如果我得到那些数据,我可以很容易地为每种颜色的每个分配声音修改增益和音高。谢谢!

1 个答案:

答案 0 :(得分:1)

您希望至少存储用户绘图动作的坐标。您可以将这些存储为点或根据您的要求将它们转换为线段和/或曲线的表示。当然,将笔划,颜色和任何您想要的内容存储在此模型中。

要做到这一点,我认为阻力最小的路径可能会让你利用java.awt.Shape以及java.awt.geom中的所有内容。具体来说,我认为您希望将每个用户绘制的元素表示为一个或多个Path2D和/或Area对象,以响应用户绘制动作。然后,让您的GUI在自定义组件上渲染这些模型。

Path2D会将移动存储为可通过PathIterator访问的线条和曲线。给定由Rectangle2D表示的轨迹栏,您可以使用可用于比较和组合几何的各种方法 - 即此处的Shape接口intersects(Rectangle2D)。如果几何模型与轨迹栏相交,则可以遍历路径组件,直到找到相交的实际子段。这可以让你获得当地的斜坡。