【问题标题】:How to change brightness of buffered image?如何改变缓冲图像的亮度?
【发布时间】:2020-06-26 06:08:36
【问题描述】:

所以基本上我正在将图像加载到我的 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)。 你能告诉我解决这个问题的正确方法是什么吗?我只能处理像素,不能使用任何外部库。 提前致谢。

【问题讨论】:

  • 您不应不必要地混合使用 JavaFX 和 Swing。您可以通过使用 JavaFX 中的 WritableImage 和 PixelReader 来实现上述所有目标。

标签: java javafx colors bufferedimage brightness


【解决方案1】:

红色、绿色和蓝色的范围是从 0 到 255,因此您不能添加比这更大的值。颜色查看官方documentation

【讨论】:

    【解决方案2】:

    一个简单的解决方案是使用Color (javafx.scene.paint.Color) 中的方法

    例子:

    Color rgb = Color.color(R,G,B);
    //OR
    Color rgba = new Color(R,G,B,A);
    
    rgb=rgb.brighter(); // Increases brightness
    rgb=rgb.darker(); // Decreases brightness
    

    【讨论】:

      猜你喜欢
      • 2021-11-09
      • 2014-02-17
      • 1970-01-01
      • 2012-10-10
      • 2018-09-25
      • 1970-01-01
      • 2015-12-13
      • 2023-03-28
      • 2012-12-25
      相关资源
      最近更新 更多