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

因此,基本上,我正在将图像加载到我的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)。 您能告诉我解决此问题的正确方法是什么?我只允许处理像素,不能使用任何外部库。 预先感谢。

wmpdh2007 回答:如何改变缓冲图像的亮度?

红色,绿色和蓝色的范围是0到255,因此您不能添加更大的值。检查官方的documentation是否有颜色

,

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

示例:

Color rgb = Color.color(R,G,B);
//OR
Color rgba = new Color(R,B,A);

rgb=rgb.brighter(); // Increases brightness
rgb=rgb.darker(); // Decreases brightness
本文链接:https://www.f2er.com/2647063.html

大家都在问