Blend effect is used to combine two inputs together using specified blend mode.
'Blend' class is used to define Blend instance.
public Blend(BlendMode mode)
public Blend(BlendMode mode, Effect bottomInput, Effect topInput)
mode: specifies the BlendMode used to blend the two inputs together
bottomInput: specifies the bottom input for this Blend operation
topInput: specifies the top input for this Blend operation
BlendMode
BlendMode is an enum which is used to specify blending mode defines the manner in which the inputs of a Blend effect are composited together or how a Node is blended into the background of a scene.
Following table summarizes different blend modes and their behaviour.
BlendMode |
Description |
SRC_OVER |
The top input is blended over the bottom input. (Equivalent to the Porter-Duff "source over destination" rule.) |
SRC_ATOP |
The part of the top input lying inside of the bottom input is blended with the bottom input. (Equivalent to the Porter-Duff "source atop destination" rule.) |
ADD |
The color and alpha components from the top input are added to those from the bottom input. The result is clamped to 1.0 if it exceeds the logical |
MULTIPLY |
The color components from the first input are multiplied with those from the second input. The alpha components are blended according to the SRC_OVER equation. |
SCREEN |
The color components from both of the inputs are inverted, multiplied with each other, and that result is again inverted to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
OVERLAY |
The input color components are either multiplied or screened, depending on the bottom input color. The alpha components are blended according to the SRC_OVER equation. |
DARKEN |
The darker of the color components from the two inputs are selected to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
LIGHTEN |
The lighter of the color components from the two inputs are selected to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
COLOR_DODGE |
The bottom input color components are divided by the inverse of the top input color components to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
COLOR_BURN |
The inverse of the bottom input color components are divided by the top input color components, all of which is then inverted to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
HARD_LIGHT |
The input color components are either multiplied or screened, depending on the top input color. The alpha components are blended according to the SRC_OVER equation. |
SOFT_LIGHT |
The input color components are either darkened or lightened, depending on the top input color. The alpha components are blended according to the SRC_OVER equation. |
DIFFERENCE |
The darker of the color components from the two inputs are subtracted from the lighter ones to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
EXCLUSION |
The color components from the two inputs are multiplied and doubled, and then subtracted from the sum of the bottom input color components, to produce the resulting color. The alpha components are blended according to the SRC_OVER equation. |
RED |
The red component of the bottom input is replaced with the red component of the top input; the other color components are unaffected. The alpha components are blended according to the SRC_OVER equation. |
GREEN |
The green component of the bottom input is replaced with the green component of the top input; the other color components are unaffected. The alpha components are blended according to the SRC_OVER equation. |
BLUE |
The blue component of the bottom input is replaced with the blue component of the top input; the other color components are unaffected. The alpha components are blended according to the SRC_OVER equation. |
How to apply blend affect?
Create an instance of Blend and apply it to the widget.
Example
Blend blendEffect = new Blend();
blendEffect.setMode(BlendMode.ADD);
group1.setEffect(blendEffect);
Find the below working application.
blendDemo.fxml
<?import javafx.scene.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<Group xmlns:fx="http://javafx.com/fxml" fx:controller="com.sample.app.controller.BlendController" fx:id="group1" >
<Circle fx:id="circle1" centerX="200" centerY="150" radius="50" fill="red" opacity="1.0"/>
<Circle fx:id="circle2" centerX="150" centerY="100" radius="50" fill="green" opacity="0.5"/>
<Circle fx:id="circle3" centerX="250" centerY="100" radius="50" fill="blue" opacity="0.5"/>
</Group>
BlendController.java
package com.sample.app.controller;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Group;
import javafx.scene.effect.Blend;
import javafx.scene.effect.BlendMode;
import javafx.scene.shape.Circle;
public class BlendController implements Initializable {
@FXML
private Group group1;
@FXML
private Circle circle1;
@FXML
private Circle circle2;
@FXML
private Circle circle3;
@Override
public void initialize(URL location, ResourceBundle resources) {
Blend blendEffect = new Blend();
blendEffect.setMode(BlendMode.ADD);
group1.setEffect(blendEffect);
}
}
BlendEffectDemo.java
package com.sample.app.effects;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class BlendEffectDemo extends Application {
private static final String FXML_FILE = "/blendDemo.fxml";
private static final String STAGE_TITLE = "Blend Effect";
public static void main(String args[]) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = (Parent) FXMLLoader.load(this.getClass().getResource(FXML_FILE));
Scene scene = new Scene(root, 400, 400, Color.WHITE);
primaryStage.setTitle(STAGE_TITLE);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Output
Note
Opacity value should be less than zero to perform blending.
No comments:
Post a Comment