4
잘린 노드에 BlendMode (또는 Blend 효과)를 추가 할 수 있습니까? BlendMode가 이미 설정된 노드에 클립을 추가하려고하면 BlendMode가 클립에 의해 무시되고 더 이상 제대로 작동하지 않는 것 같습니다. 일부 예제 코드는 문제를 재현하는 방법 :JavaFX에서 잘린 노드에 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();
}
}
을보십시오! 그러나 이것이 캐시되지 않은 버전이 아니라 왜 작동해야하는지 잘 모르겠습니다. AFAIK, 캐싱은 노드와 각 효과를 다시 랜더링하는 것과 달리 노드의 비트 맵 버전을 메모리에 저장하여 렌더링 속도를 향상시켜야합니다. 캐시 된 버전과 캐시되지 않은 버전간에 이러한 불일치가 JavaFX 자체의 버그를 나타 냅니까? – ddukki
그래, 나는 또한 JAVAFX에 결함이 있다고 생각한다.'swing'에서 이런 일이 발생할 때마다'repaint()'를 호출 할 수 있지만, JavaFx에서는 repaint()를 명시 적으로 호출 할 수 없기 때문에 캐싱을 사용한다. – aKilleR