📜  JavaFX 运动模糊效果(1)

📅  最后修改于: 2023-12-03 15:01:36.436000             🧑  作者: Mango

JavaFX 运动模糊效果

JavaFX 运动模糊效果是一种视觉效果,它通过对场景中运动的对象进行模糊处理,可以产生出一种运动模糊的视觉效果。这种效果常用于电影、电视剧以及广告等需要强调动感的场合中,可以让图像更加流畅、有张力和动感。

实现

JavaFX 提供了一个 MotionBlur 类,它可以实现运动模糊效果。接下来,我们将介绍如何在 JavaFX 中使用 MotionBlur 类来实现运动模糊效果。

步骤
  1. 创建一个 JavaFX 应用程序。
  2. 创建一个场景(Scene),并在场景中添加需要产生模糊效果的节点(例如,一个 ImageView、Pane 或 Group)。
  3. 创建一个 MotionBlur 对象,并设置其 Angle 和 Radius 属性,这两个属性将分别决定模糊方向和模糊半径。
  4. 将 MotionBlur 对象添加到场景中需要产生模糊效果的节点中。在场景中移动该节点时,将产生运动模糊效果。
代码示例

以下是一个使用 MotionBlur 类实现运动模糊效果的 JavaFX 应用程序示例:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.MotionBlur;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class MotionBlurExample extends Application {

   @Override
   public void start(Stage stage) throws Exception {
      // 创建一个 ImageView 对象并设置图像
      ImageView imageView = new ImageView(new Image("https://via.placeholder.com/350x150.png"));

      // 创建一个 MotionBlur 对象并设置 Angle 和 Radius 属性
      MotionBlur motionBlur = new MotionBlur();
      motionBlur.setAngle(45);
      motionBlur.setRadius(10);

      // 将 MotionBlur 对象添加到 ImageView 中
      imageView.setEffect(motionBlur);

      // 创建一个 Group 对象并将 ImageView 添加到该组中
      Group root = new Group(imageView);

      // 创建一个场景并将 Group 添加到场景中
      Scene scene = new Scene(root, 350, 150);

      // 设置场景标题和显示窗口
      stage.setTitle("Motion Blur Example");
      stage.setScene(scene);
      stage.show();

      // 在场景中移动 ImageView,观察运动模糊效果
      Thread thread = new Thread(() -> {
         double x = 0;
         double y = 0;
         double deltaX = 5;
         double deltaY = 5;

         while (true) {
            x += deltaX;
            y += deltaY;

            if (x > scene.getWidth() - imageView.getFitWidth() || x < 0) {
               deltaX *= -1;
            }

            if (y > scene.getHeight() - imageView.getFitHeight() || y < 0) {
               deltaY *= -1;
            }

            imageView.relocate(x, y);

            try {
               Thread.sleep(50);
            } catch (InterruptedException ex) {
               ex.printStackTrace();
            }
         }
      });

      thread.setDaemon(true);
      thread.start();
   }

   public static void main(String[] args) {
      launch(args);
   }
}

运行该程序时,将在界面中看到一个带有 MotionBlur 效果的图像,并且当移动该图像时,将看到它产生的运动模糊效果。