多读书多实践,勤思考善领悟

JavaFX effect Blend(混合效果)

本文于1806天之前发表,文中内容可能已经过时。

通常,混合物是指两种或更多种不同物质或物质的混合物。如果我们应用混合效果,它将采用两个不同输入的像素。这将在同一位置完成,并根据混合模式生成组合输出。

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

混合效果应用

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

  • bottomInput - 此属性的类型为Effect,它表示混合效果的底部输入。
  • topInput - 此属性的类型为Effect,它表示混合效果的顶部输入。
  • opacity - 此属性为double类型,它表示使用顶部输入调制的不透明度值。
  • mode - 此属性属于BlendMode类型,它表示用于将两个输入混合在一起的模式。

以下是展示混合效果的示例。在这里,我们绘制一个充满BROWN颜色的圆圈,它上面是一个BLUEVIOLET ColorInput。

我们已经应用了混合效果选择乘法模式在重叠区域中,两个对象的颜色相乘并显示。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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文件。

1
2
javac BlendEffectExample.java 
java BlendEffectExample

执行时,上面的程序生成一个JavaFX窗口,如下所示。

混合效果示例

混合模式

序号 模式和说明 产量
1 在此模式下,添加并显示顶部和底部输入的颜色值。 添加模式
2 在此模式下,顶部和底部输入的颜色值相乘并显示。 多重模式
3 区别在该模式中,在顶部和底部输入的颜色值中,从较亮的一个中减去较暗的一个并显示。 差异模式
4 红色在此模式下,底部输入的红色分量被顶部输入的红色分量替换。 红色模式
5 蓝色在此模式下,底部输入的蓝色分量被顶部输入的蓝色分量替换。 蓝色模式
6 绿色在此模式下,底部输入的绿色组件被顶部输入的绿色组件替换。 绿色模式
7 排除在此模式下,两个输入的颜色分量相乘并加倍。然后从底部输入的颜色分量之和中减去它们。然后显示结果。 排除模式
8 COLOR_BURN在此模式中,底部输入颜色分量的倒数除以顶部输入颜色分量。因此,反转并显示所获得的值。 颜色烧伤
9 COLOR_DODGE在该模式中,底部输入颜色分量除以顶部输入颜色分量的倒数,因此反转并显示所获得的值。 COLOR DODGE
10 减轻在此模式下,显示两个输入中较浅的颜色分量。 减轻
11 变暗在此模式下,显示顶部和底部输入中较暗的颜色分量。 变暗
12 屏幕在该模式中,顶部和底部输入的颜色分量被反转,相乘,因此获得的值被反转并显示。 屏幕
13 覆盖在此模式下,基于底部输入颜色,将两个输入值的颜色分量相乘或筛选,并显示结果。 覆盖
14 HARD_LIGHT在此模式下,基于顶部输入颜色,将两个输入值的颜色分量相乘或筛选,并显示结果。 硬灯
15 SOFT_LIGH在此模式下,基于顶部输入颜色,两个输入值的颜色分量被软化或变亮,并显示结果。 柔光
16 SRC_ATOP在此模式下,重叠区域填充底部输入的颜色分量。虽然非重叠区域填充了顶部输入的颜色分量。 SRC ATOP
17 SRC_OVER在此模式下,顶部输入绘制在底部输入上。 SRC OVER