【问题标题】:Barrel distortion effect for image (JavaFX)图像的桶形失真效果(JavaFX)
【发布时间】:2022-01-19 21:10:30
【问题描述】:

我正在寻找某种方法来为使用 JavaFX 的节点设置具有桶形失真效果 (FishEye/FOV) 的背景图像。我找到了带有像素操作的算法,但我想找到另一种方法(一些技巧)来实现它。此效果将用于创建此效果的节点背景高清图像变化动画(动画将是变化因子(功率/值/度?))。

【问题讨论】:

    标签: java image-processing javafx distortion fisheye


    【解决方案1】:

    我想提供一种更高效(实时)的替代方法。任何基于直接像素操作的解决方案都注定是非常低效的,尤其是对于“高清图像”。

    相反,我建议为此使用 TriangleMesh 并将图像用作其纹理。然后,您可以通过操纵纹理坐标来应用您喜欢的任何类型的失真。这种方法可以通过 JavaFX 场景图轻松集成到任何 2D 图形中。

    我正在积极地使用这个概念来动态重新投影栅格地图图块,所以我知道它有效。

    【讨论】:

    • 对于高性能情况,我同意 3D 网格方法优于我的回答中提出的像素操作方法。在这种情况下,最好让 GPU 中的专用硬件加速器来完成像素渲染的繁重工作。
    • 一些额外的resources for texture mapping3d surfaces with animation 以备不时之需。
    【解决方案2】:

    我将本着被问到的精神来回答这个问题,即没有代码。

    JavaFX 有一个效果框架。

    没有内置鱼眼效果。

    如果您是熟练的开发人员,您可以创建自己的自定义鱼眼效果实现并将其插入effect framework

    使用WritableImagePixelWriterCanvas 来应用您的算法更简单。也许这甚至可以使用ImageInput 插入效果框架(如果你真的需要这样做,你可能不需要)。

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

    当然,您可以使用 fisheye algorithm(为 JavaFX 而不是链接实现编码)进行鱼眼变换。

    要制作动画,请使用AnimationTimer,或者同样对于熟练的开发人员,创建一个插入JavaFX animation frameworkcustom transition

    您可以向自定义效果添加属性,并使用在您创建的自定义过渡上定义的其他属性来操作它们。

    提供完整的解决方案超出了 StackOverflow 答案的范围。要获得个别任务的帮助,请将问题分成不同的部分,例如创建自定义效果,操作像素以创建鱼眼,为图像或时间轴设置动画效果等。编写代码并使用minimal example 询问有关实际代码的问题,以解决您遇到的问题部分卡住了。

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多