Javafx 简明教程

JavaFX - Blend Effect

通常情况下,混合是指两种或多种不同事物或物质的混合。如果我们应用混合效果,它将采用两个不同输入的像素。这将在相同位置执行,并且它基于 blend mode 生成一个组合输出。

例如,如果我们绘制两个对象,则顶部对象覆盖底部对象。在应用混合效果时,重叠区域中两个对象的像素基于输入模式组合并显示。

blend effect applied

javafx.scene.effect 中名为 Blend 的类表示混合效果,此类包含四个属性,它们分别是 -

  1. bottomInput - 此属性类型为 Effect,它表示混合效果的底部输入。

  2. topInput - 此属性类型为 Effect,它表示混合效果的顶部输入。

  3. opacity - 此属性类型为 double,它表示与顶部输入一起调整的不透明度值。

  4. mode - 此属性类型为 BlendMode,它表示用于将两个输入混合在一起的模式。

Example

下面是一个演示混合效果的示例。在这里,我们绘制一个用 BROWN 颜色填充的圆圈,其上面是一个 BLUEVIOLET ColorInput。

我们应用了混合效果,在重叠区域中选择一种混合模式,两个对象的色彩以乘数形式相乘后显示。

将此代码保存在名为 BlendEffectExample.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.effect.Blend;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.ColorInput;
import javafx.scene.paint.Color;

public class BlendEffectExample extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing a Circle
      Circle circle = new Circle();

      //Setting the center of the Circle
      circle.setCenterX(75.0f);
      circle.setCenterY(75.0f);

      //Setting radius of the circle
      circle.setRadius(30.0f);

      //Setting the fill color of the circle
      circle.setFill(Color.BROWN);

      //Instantiating the blend class
      Blend blend = new Blend();

      //Preparing the to input object
      ColorInput topInput = new ColorInput(35, 30, 75, 40, Color.BLUEVIOLET);

      //setting the top input to the blend object
      blend.setTopInput(topInput);

      //setting the blend mode
      blend.setMode(BlendMode.SRC_OVER);

      //Applying the blend effect to circle
      circle.setEffect(blend);

      //Creating a Group object
      Group root = new Group(circle);

      //Creating a scene object
      Scene scene = new Scene(root, 150, 150);

      //Setting title to the Stage
      stage.setTitle("Blend Example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls BlendEffectExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls BlendEffectExample

Output

执行后,上述程序会生成如下所示的 JavaFX 窗口。

blend effect example

Blend Modes

S.NO

Mode & Description

Output

1

ADD 在此模式下,顶部输入和底部输入的色彩值相加后显示。

2

MULTIPLY 在此模式下,顶部输入和底部输入的色彩值以乘数形式相乘后显示。

3

DIFFERENCE 在此模式下,在顶部输入和底部输入的色彩值中,将较深的颜色从较浅的颜色中减掉后显示。

4

RED 在此模式下,底部输入的红色分量由顶部输入的红色分量取代。

5

BLUE 在此模式下,底部输入的蓝色分量由顶部输入的蓝色分量取代。

6

GREEN 在此模式下,底部输入的绿色分量由顶部输入的绿色分量取代。

7

EXCLUSION 在此模式下,两个输入的色彩分量以乘数形式相乘后加倍。然后从底部输入的色彩分量之和中减掉这些分量。然后将结果显示出来。

8

COLOR_BURN 在此模式下,底部的输入颜色分量除以顶部的输入颜色分量。因此,将所得值反转并显示。

9

COLOR_DODGE 在此模式下,底部的输入颜色分量除以顶部的输入颜色分量的倒数,并将获得的值反转并显示。

10

LIGHTEN 在此模式下,显示两个输入亮度最浅的颜色分量。

11

DARKEN 在此模式下,显示顶部和底部最深的颜色分量。

12

SCREEN 在此模式下,反转、相乘顶部和底部输入的颜色分量,并将获得的值反转并显示。

13

OVERLAY 在此模式下,基于底部输入颜色,两个输入值的颜色分量被相乘或筛选,并显示结果。

14

HARD_LIGHT 在此模式下,基于顶部输入颜色,两个输入值的颜色分量被相乘或筛选,并显示结果。

15

SOFT_LIGH 在此模式下,基于顶部输入颜色,两个输入值的颜色分量被软化或变亮,并显示结果。

16

SRC_ATOP 在此模式下,重叠区域用底部输入的颜色分量填充。而未重叠的区域用顶部输入的颜色分量填充。

17

SRC_OVER 在此模式下,顶部输入绘制在底部输入上方。