java - 如何改变缓冲图像的亮度?

标签 java javafx colors bufferedimage brightness

所以基本上我将图像加载到我的javafx应用程序中,单击“+”或“-”按钮后我想增加或减少图像亮度。目前我的方法如下所示:

  public void increaseBrightness(ActionEvent actionEvent) {
    BufferedImage imageToBright = SwingFXUtils.fromFXImage(imageView.getImage(), null);
    for(int x=0; x<imageToBright.getWidth(); x++){
      for(int y=0; y<imageToBright.getHeight(); y++){
        int rgba = imageToBright.getRGB(x,y);
        Color color = new Color(rgba, true);
        color = new Color(
          validatePixelValue(color.getRed() + 10),
          validatePixelValue(color.getGreen() + 10),
          validatePixelValue(color.getBlue() + 10)
        );
        imageToBright.setRGB(x,y, color.getRGB());
      }
    }
    imageView.setImage(SwingFXUtils.toFXImage(imageToBright, null));
  }

  private int validatePixelValue(int value){
    if(value > 255){
      value = 255;
    } else if(value < 0){
      value = 0;
    }
    return value;
  }

它可以工作,但问题是当像素值超过 255 时(例如 251 + 10 最终会变成 255 而不是 261),他的值就会丢失 - 我的意思是当我以与上述方法相同的方式降低亮度时我不会有相同的值(255 - 10 而不是 261 - 10)。 你能告诉我解决这个问题的正确方法是什么吗?我只允许处理像素,不能使用任何外部库。 提前致谢。

最佳答案

红色、绿色和蓝色的范围为 0 到 255,因此您不能添加大于该值的值。查看官方documentation对于颜色

关于java - 如何改变缓冲图像的亮度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60683786/

相关文章:

javascript - FCM Web - 相同的前台和后台通知(在前台重用后台通知)

java - 持久化新实体后,如何使用其父实体的信息填充实体中的字段

javafx - JavaFX 12 中的 WebConsoleListener IllegalAccessError

javafx - 使用 JavaFX 将渐变应用于球体对象

treeview - JavaFx 2.0 : get TreeItems or Nodes currently visible on screen

colors - 每个数据集不同的颜色

java - JScrollPane 隐藏文本区域

java - for 循环在已编译的类文件中转换为 do while 循环

javascript - 如何为具有多种颜色的导航栏实现淡入淡出的颜色混合

java - 根据值动态设置颜色 Java Swing