【发布时间】:2022-01-19 21:10:30
【问题描述】:
我正在寻找某种方法来为使用 JavaFX 的节点设置具有桶形失真效果 (FishEye/FOV) 的背景图像。我找到了带有像素操作的算法,但我想找到另一种方法(一些技巧)来实现它。此效果将用于创建此效果的节点背景高清图像变化动画(动画将是变化因子(功率/值/度?))。
【问题讨论】:
标签: java image-processing javafx distortion fisheye
我正在寻找某种方法来为使用 JavaFX 的节点设置具有桶形失真效果 (FishEye/FOV) 的背景图像。我找到了带有像素操作的算法,但我想找到另一种方法(一些技巧)来实现它。此效果将用于创建此效果的节点背景高清图像变化动画(动画将是变化因子(功率/值/度?))。
【问题讨论】:
标签: java image-processing javafx distortion fisheye
我想提供一种更高效(实时)的替代方法。任何基于直接像素操作的解决方案都注定是非常低效的,尤其是对于“高清图像”。
相反,我建议为此使用 TriangleMesh 并将图像用作其纹理。然后,您可以通过操纵纹理坐标来应用您喜欢的任何类型的失真。这种方法可以通过 JavaFX 场景图轻松集成到任何 2D 图形中。
我正在积极地使用这个概念来动态重新投影栅格地图图块,所以我知道它有效。
【讨论】:
我将本着被问到的精神来回答这个问题,即没有代码。
JavaFX 有一个效果框架。
没有内置鱼眼效果。
如果您是熟练的开发人员,您可以创建自己的自定义鱼眼效果实现并将其插入effect framework。
使用WritableImage 和PixelWriter 或Canvas 来应用您的算法更简单。也许这甚至可以使用ImageInput 插入效果框架(如果你真的需要这样做,你可能不需要)。
有关将算法应用于输入图像中的像素的示例,请参见:
当然,您可以使用 fisheye algorithm(为 JavaFX 而不是链接实现编码)进行鱼眼变换。
要制作动画,请使用AnimationTimer,或者同样对于熟练的开发人员,创建一个插入JavaFX animation framework 的custom transition。
您可以向自定义效果添加属性,并使用在您创建的自定义过渡上定义的其他属性来操作它们。
提供完整的解决方案超出了 StackOverflow 答案的范围。要获得个别任务的帮助,请将问题分成不同的部分,例如创建自定义效果,操作像素以创建鱼眼,为图像或时间轴设置动画效果等。编写代码并使用minimal example 询问有关实际代码的问题,以解决您遇到的问题部分卡住了。
【讨论】: