java - 将 BlendMode 添加到 JavaFX 中的裁剪节点

标签 java javafx clipping blending

有没有办法将 BlendMode(或 Blend 效果)添加到已被裁剪的节点?似乎如果我尝试将剪辑添加到已设置 BlendMode 的节点,则 BlendMode 会被剪辑覆盖并且不再正常工作。重现问题的一些示例代码:

package display.fx.demo;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.BlendMode;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class BlendModeClipProblem extends Application {
    public Rectangle blueRect = new Rectangle(0, 0, 30, 30);
    public Rectangle redRect = new Rectangle(15, 15, 30, 30);

    @Override
    public void start(final Stage stage)
            throws Exception {
        final Pane pane = new Pane();
        final Scene scene = new Scene(pane);
        pane.getChildren().add(blueRect);
        pane.getChildren().add(redRect);

        blueRect.setFill(Color.BLUE);
        redRect.setFill(Color.RED);

        redRect.setBlendMode(BlendMode.ADD);

        // Comment this next line to see blending
        redRect.setClip(new Rectangle(15, 15, 20, 20));

        stage.setScene(scene);
        stage.show();
    }
}

最佳答案

尝试这样的事情(使用缓存矩形)

@Override
    public void start(final Stage stage)
            throws Exception {
        final Pane pane = new Pane();
        final Scene scene = new Scene(pane);
        pane.getChildren().add(blueRect);
        pane.getChildren().add(redRect);

        blueRect.setFill(Color.BLUE);
        redRect.setFill(Color.RED);

        redRect.setBlendMode(BlendMode.ADD);

        redRect.setCache(true);
        redRect.setCacheHint(CacheHint.QUALITY);

        redRect.setClip(new Rectangle(15, 15, 20, 20));

        stage.setScene(scene);
        stage.show();
    }

关于java - 将 BlendMode 添加到 JavaFX 中的裁剪节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783454/

相关文章:

java - TableView编辑列JAVA FX

html - 在 css 中使用 div 作为剪贴蒙版

html - 是否可以使用 html5 和 Canvas 剪辑/屏蔽 div?

java - 以编程方式添加的 View 寻呼机不显示

java - VirtualBox Sdk Java - 从主机操作系统在 guest 操作系统内执行命令

java - 可执行 jar 文件中的 BeanDefinitionParsingException

javascript - Internet Explorer 10 Canvas 裁剪意外行为

java - 如何逐帧读取视频?

java - 如何在 DefaultButton 操作之前使用 KeyPressed 事件?

java - 如何在 JavaFX FXML 中公平分配 VBox 中的节点