如何更改缓冲图像的亮度



所以基本上我正在将图像加载到我的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,所以不能添加比这更大的值。查看彩色的官方文档

一个简单的解决方案是使用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

相关内容

  • 没有找到相关文章

最新更新