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
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ą.