Zielony Smok

JavaFX canvas: Atrybut ogólny ‘global blend mode’

Atrybut: global blend mode

Typ: BlendMode

Wartość domyślna: BlendMode.SRC_OVER.

Getter: BlendMode getGlobalBlendMode()

Setter: void setGlobalBlendMode(BlendMode)

Save/restore: true

Opis: Wartość wyliczenia, która kontroluje w jaki sposób piksele z każdej operacji renderowania
są komponowane (composited) w istniejący obraz.

Atrybut ogólny ‘global blend mode’

Klasa Listing25_57

Ściągnij klasę Listing25_57

package rozdzial25c;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.effect.BlendMode;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;

public class Listing25_57 extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) {
        try {
            Group root = new Group();
            Canvas cv = new Canvas(425, 550);
            GraphicsContext gc = cv.getGraphicsContext2D();
            gc.setGlobalAlpha(0.8);
            Paint s = Color.web("#FF3366");
            Paint d = Color.web("#0066FF");
            //
            gc.setGlobalBlendMode(BlendMode.ADD);
            gc.setFill(s);
            gc.fillOval(25, 25, 50, 50);
            gc.setFill(d);
            gc.fillOval(50, 25, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.BLUE);
            gc.setFill(s);
            gc.fillOval(125, 25, 50, 50);
            gc.setFill(d);
            gc.fillOval(150, 25, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.COLOR_BURN);
            gc.setFill(s);
            gc.fillOval(225, 25, 50, 50);
            gc.setFill(d);
            gc.fillOval(250, 25, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.COLOR_DODGE);
            gc.setFill(s);
            gc.fillOval(325, 25, 50, 50);
            gc.setFill(d);
            gc.fillOval(350, 25, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.DARKEN);
            gc.setFill(s);
            gc.fillOval(25, 125, 50, 50);
            gc.setFill(d);
            gc.fillOval(50, 125, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.DIFFERENCE);
            gc.setFill(s);
            gc.fillOval(125, 125, 50, 50);
            gc.setFill(d);
            gc.fillOval(150, 125, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.EXCLUSION);
            gc.setFill(s);
            gc.fillOval(225, 125, 50, 50);
            gc.setFill(d);
            gc.fillOval(250, 125, 50, 50);
            gc.setGlobalBlendMode(BlendMode.GREEN);
            gc.setFill(s);
            gc.fillOval(325, 125, 50, 50);
            gc.setFill(d);
            gc.fillOval(350, 125, 50, 50);
            //
            gc.setGlobalBlendMode(BlendMode.HARD_LIGHT);
            gc.setFill(s);
            gc.fillOval(25, 225, 50, 50);
            gc.setFill(d);
            gc.fillOval(50, 225, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.LIGHTEN);
            gc.setFill(s);
            gc.fillOval(125, 225, 50, 50);
            gc.setFill(d);
            gc.fillOval(150, 225, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.MULTIPLY);
            gc.setFill(s);
            gc.fillOval(225, 225, 50, 50);
            gc.setFill(d);
            gc.fillOval(250, 225, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.OVERLAY);
            gc.setFill(s);
            gc.fillOval(325, 225, 50, 50);
            gc.setFill(d);
            gc.fillOval(350, 225, 50, 50);
            //
            gc.setGlobalBlendMode(BlendMode.RED);
            gc.setFill(s);
            gc.fillOval(25, 325, 50, 50);
            gc.setFill(d);
            gc.fillOval(50, 325, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.SCREEN);
            gc.setFill(s);
            gc.fillOval(125, 325, 50, 50);
            gc.setFill(d);
            gc.fillOval(150, 325, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.SOFT_LIGHT);
            gc.setFill(s);
            gc.fillOval(225, 325, 50, 50);
            gc.setFill(d);
            gc.fillOval(250, 325, 50, 50);
            //-
            gc.setGlobalBlendMode(BlendMode.SRC_ATOP);
            gc.setFill(s);
            gc.fillOval(325, 325, 50, 50);
            gc.setFill(d);
            gc.fillOval(350, 325, 50, 50);
            //
            gc.setGlobalBlendMode(BlendMode.SRC_OVER);
            gc.setFill(s);
            gc.fillOval(25, 425, 50, 50);
            gc.setFill(d);
            gc.fillOval(50, 425, 50, 50);
            //-
            gc.setFill(Color.BLACK);
            gc.fillText("ADD", 50, 100);
            gc.fillText("BLUE", 150, 100);
            gc.fillText("COLOR_BURN", 225, 100);
            gc.fillText("COLOR_DODGE", 325, 100);
            gc.fillText("DARKEN", 50, 200);
            gc.fillText("DIFFERENCE", 150, 200);
            gc.fillText("EXCLUSION", 225, 200);
            gc.fillText("GREEN", 325, 200);
            gc.fillText("HARD_LIGHT", 50, 300);
            gc.fillText("LIGHTEN", 150, 300);
            gc.fillText("MULTIPLY", 225, 300);
            gc.fillText("OVERLAY", 325, 300);
            gc.fillText("RED", 50, 400);
            gc.fillText("SCREEN", 150, 400);
            gc.fillText("SOFT_LIGHT", 225, 400);
            gc.fillText("SRC_ATOP", 325, 400);
            gc.fillText("SRC_OVER", 50, 500);
            //-
            BlendMode bm = gc.getGlobalBlendMode();
            System.out.println(bm);
            //-
            root.getChildren().add(cv);
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.setTitle("Atrybut ogólny 'global blend mode'");
            stage.setOnCloseRequest(e -> Platform.exit());
            stage.show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}          
SRC_OVER
Atrybut ogólny 'global blend mode'
Rys. 25_67. Atrybut ogólny ‘global blend mode’

SRC_ATOP nie da się ustawić z nieznanych przyczyn. Jeśli zmienić kolejność i SRC_ATOP umieścić na końcu teksty opisów w ogóle się nie wyświetlają.