JavaFX - 混合效果



一般来说,混合是指两种或多种不同事物或物质的混合。如果我们应用混合效果,它将获取两个不同输入的像素。这将在相同的位置执行,并根据混合模式生成组合输出。

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

Blend effect Applied

名为Blend的类(位于javafx.scene.effect包中)表示混合效果,此类包含四个属性,它们是:

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

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

  • opacity - 此属性为 double 类型,它表示与顶部输入调制的透明度值。

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

示例

以下示例演示了混合效果。在这里,我们在棕色填充的圆圈之上绘制了一个蓝色紫色 ColorInput。

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

将此代码保存在名为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

输出

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

Blend Effect Example

混合模式

序号 模式和描述 输出
1

ADD

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

Add Mode
2

MULTIPLY

在此模式下,顶部和底部输入的颜色值相乘并显示。

MULTIPLY Mode
3

DIFFERENCE

在此模式下,在顶部和底部输入的颜色值中,较暗的颜色值从较亮的颜色值中减去并显示。

DIFFERENCE Mode
4

RED

在此模式下,底部输入的红色分量将被顶部输入的红色分量替换。

RED Mode
5

BLUE

在此模式下,底部输入的蓝色分量将被顶部输入的蓝色分量替换。

BLUE Mode
6

GREEN

在此模式下,底部输入的绿色分量将被顶部输入的绿色分量替换。

GREEN MODE
7

EXCLUSION

在此模式下,两个输入的颜色分量相乘并加倍。然后,它们从底部输入的颜色分量之和中减去。然后显示结果。

EXCLUSION Mode
8

COLOR_BURN

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

COLOR BURN
9

COLOR_DODGE

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

COLOR DODGE
10

LIGHTEN

在此模式下,显示两个输入中较亮的颜色分量。

Lighten
11

DARKEN

在此模式下,显示顶部和底部输入中较暗的颜色分量。

Darken
12

SCREEN

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

Screen
13

OVERLAY

在此模式下,根据底部输入颜色,将两个输入值的颜色分量相乘或筛选,然后显示结果。

Overlay
14

HARD_LIGHT

在此模式下,根据顶部输入颜色,将两个输入值的颜色分量相乘或筛选,然后显示结果。

Hard Light
15

SOFT_LIGH

在此模式下,根据顶部输入颜色,将两个输入值的颜色分量软化或变亮,然后显示结果。

Soft Light
16

SRC_ATOP

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

SRC ATOP
17

SRC_OVER

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

SRC OVER
广告