Javafx 简明教程
JavaFX - Blend Effect
通常情况下,混合是指两种或多种不同事物或物质的混合。如果我们应用混合效果,它将采用两个不同输入的像素。这将在相同位置执行,并且它基于 blend mode 生成一个组合输出。
例如,如果我们绘制两个对象,则顶部对象覆盖底部对象。在应用混合效果时,重叠区域中两个对象的像素基于输入模式组合并显示。
包 javafx.scene.effect 中名为 Blend 的类表示混合效果,此类包含四个属性,它们分别是 -
-
bottomInput - 此属性类型为 Effect,它表示混合效果的底部输入。
-
topInput - 此属性类型为 Effect,它表示混合效果的顶部输入。
-
opacity - 此属性类型为 double,它表示与顶部输入一起调整的不透明度值。
-
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
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 在此模式下,顶部输入绘制在底部输入上方。 |