改变整个场景的亮度

Posted

技术标签:

【中文标题】改变整个场景的亮度【英文标题】:Change brightness of whole scene 【发布时间】:2017-08-04 01:58:55 【问题描述】:

我正在尝试在 javafx 中更改整个场景的亮度。这是我的代码目前的样子:

public void start(Stage primaryStage) 
  StackPane root = new StackPane();

  Rectangle rec1 = new Rectangle();
  rec1.setWidth(300);
  rec1.setHeight(300);
  rec1.setFill(javafx.scene.paint.Color.RED);

  ColorAdjust colorAdjust = new ColorAdjust();
  colorAdjust.setBrightness(-0.8);

  root.setEffect(colorAdjust);

  Scene scene = new Scene(root, 1920, 1080);
  root.getChildren().add(rec1);

  primaryStage.setFullScreen(true);
  primaryStage.setScene(scene);
  primaryStage.show();

问题是,像这样只改变矩形的亮度,而不是整个场景的亮度。我还需要改变“背景”的亮度。有什么办法吗?

【问题讨论】:

【参考方案1】:

奇怪的是,这似乎是通过向StackPane 添加一个节点来解决的,以便它可以调整所有内容的颜色,而不仅仅是形状。当形状是唯一可见的东西时,这就是ColorAdjusted。必须至少存在一个Node。将一行更改为以下内容将满足您的要求:

root.getChildren().addAll(rec1, new Label());

但是,这可能会对您的项目产生影响,即使它是空的,也会稍微改变一些东西。我们可以通过将其设为 invisible and not-managed 来解决此问题,这样在布局计算中就不会考虑它。

Label fix = new Label("Fix colorAdjust whole scene.");
fix.setVisible(false);
fix.setManaged(false);

Scene scene = new Scene(root, 500, 500);
root.getChildren().addAll(rec1, fix);

【讨论】:

以上是关于改变整个场景的亮度的主要内容,如果未能解决你的问题,请参考以下文章

改变背景图像的亮度?

当系统改变屏幕亮度时,iOS 是不是会发送通知?

是否在拍摄图像时改变亮度,改变图像中的对象大小?

视频屏幕左半部分上下滑动改变亮度,右半部分上下滑动改变声音

使用后置摄像头计算场景亮度

Android 按键 亮度对话框滑动时不能消失,点击或滑动需要动态改变亮度值和动画效果