图像的桶形失真效果(JavaFX)



我正在寻找一些方法,使用JavaFX为节点设置具有桶形失真效果(FishEye/FOV(的背景图像。我找到了像素操作的算法,但我想找到另一种方法(一些破解(来达到它。这个效果将用于创建节点背景高清图像更改动画(动画将是这个效果的更改因子(幂/值/度?((。

我想提供一种更高效(实时(的替代方法。任何基于直接像素操作的解决方案都注定是非常低效的;高清晰度图像";。

相反,我建议使用三角形网格,并使用图像作为其纹理。然后,只需操纵纹理坐标,就可以应用任何类型的扭曲。这种方法可以通过JavaFX场景图轻松集成到任何2D图形中。

我正在积极地将这个概念用于光栅地图瓦片的动态重投影,所以我知道它是有效的。

我将按照问题的精神回答这个问题,即没有代码。

JavaFX有一个效果框架。

没有内置的鱼眼效应。

如果你是一个熟练的开发人员,你可以创建自己的自定义鱼眼效果实现,并将其插入效果框架。

更简单的方法是使用带有PixelWriter或Canvas的WritableImage来应用您的算法。也许这甚至可以使用ImageInput插入效果框架(如果你真的需要这样做,但你可能没有(。

有关将算法应用于输入图像中像素的示例,请参见:

  • 减少颜色数量并获得单个像素的颜色

当然,您会使用鱼眼算法(为JavaFX而不是链接的实现编码(进行鱼眼转换。

要制作动画,请使用AnimationTimer,或者,对于熟练的开发人员来说,创建一个插入JavaFX动画框架的自定义转换。

可以将特性添加到自定义效果中,并使用在创建的自定义过渡上定义的其他特性对其进行操作。

提供一个完整的解决方案超出了StackOverflow答案的范围。要获得单独任务的帮助,请将问题分解为不同的部分,例如创建自定义效果、操纵像素以创建鱼眼、在图像或时间线上设置效果动画等。编写代码并询问有关实际代码的问题,并为遇到问题时试图解决的问题部分提供一个最小的示例。

最新更新