Как изменить яркость буферизованного изображения? - PullRequest
0 голосов
/ 14 марта 2020

Таким образом, в основном я загружаю изображение в приложение 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;
  }

Он работает, но проблема в том, что значение пикселя будет go выше 255 (например, 251 + 10 закончится как 255, а не 261), его значение будет потеряно - Я имею в виду, что когда я уменьшаю яркость так же, как в методе выше, у меня не будет того же значения (255 - 10 вместо 261 - 10). Можете ли вы сказать мне, как правильно подойти к этой проблеме? Мне разрешено работать только с пикселями, я не могу использовать внешние библиотеки. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Простым решением было бы использование методов из Цвет (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
1 голос
/ 14 марта 2020

Диапазон для красного, зеленого и синего составляет от 0 до 255, поэтому вы не можете добавить больше значений, чем это. Проверьте официальную документацию для цвета

...