获取javafx窗口的像素颜色

rn0zuynd  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(314)

注意:我使用的是TornadFX和kotlin,但它基于javafx,并添加了一些kotlin,这就是为什么我要提到javafx,因为它似乎比TornadFX更与javafx相关。
我正在尝试获取javafx窗口(场景)上特定位置的颜色。原因是因为对于我的2d游戏,我试图构建一张Map。例如,如果我触摸黑色,则停止向该方向移动(因此边界)。或者如果是红色,那么就失去一条生命(障碍)。与其硬编码(我不知道如何才能做到这一点,因为我不希望Map只是一个正方形),我尝试获取像素和颜色。请注意,由于这是命中检测系统的一部分,它将以每秒100+的速度运行,因此我需要一个不会花费太多时间的解决方案。
另外,请注意,我不是试图从图像中获取像素,而是用户看到的窗口(只是澄清一下,以免有人误解)编辑:我刚刚意识到我可能会使用图像,并从中获得颜色。。。虽然如果我放大图像使Map变大。。那一部分让我很困惑,当时我怎么能做到。

drnojrws

drnojrws1#

您可以使用robot api来执行此操作,以获取当前鼠标位置的颜色

int xValue = MouseInfo.getPointerInfo().getLocation().x;
int yValue = MouseInfo.getPointerInfo().getLocation().y;
Robot robot = new Robot();
Color color = robot.getPixelColor(xValue, yValue);

要在光标移动时获取当前位置,需要使用setonmousemoved侦听器

yourViewNode.setOnMouseMoved(event -> {
    int xValue = MouseInfo.getPointerInfo().getLocation().x;
    int yValue = MouseInfo.getPointerInfo().getLocation().y;
    Robot robot = new Robot();
    Color color = robot.getPixelColor(xValue, yValue);
});

然后,您可以比较颜色并进行检查,如果您希望在用户单击时显示颜色,则只需侦听右键或左键单击,然后在侦听器中使用相同的代码来获取此时的颜色
我在我的bot-creator项目中使用了这个解决方案,以提供可以根据当前位置颜色采取行动的工具

相关问题