我的问题:我希望能够更改资源图像的亮度并将其三个实例作为ImageIcons。一个亮度为50%(更暗),另一个亮度为75%(亮一些),最后亮度为100%(与原始图像相同)。我也想保持透明度。如何更改图像的亮度
我试过的东西:我查了一下,看起来最好的解决方案是使用RescaleOp
,但我无法弄清楚。我不知道scaleFactor和偏移量是什么。这是我尝试过的代码。
public void initialize(String imageLocation, float regularBrightness, float focusedBrightness, float pressedBrightness, String borderTitle) throws IOException {
BufferedImage bufferedImage = ImageIO.read(ButtonIcon.class.getResource(imageLocation));
setRegularIcon(getAlteredImageIcon(bufferedImage, regularBrightness));
setFocusedIcon(getAlteredImageIcon(bufferedImage, focusedBrightness));
setPressedIcon(getAlteredImageIcon(bufferedImage, pressedBrightness));
setTitle(borderTitle);
init();
}
private ImageIcon getAlteredImageIcon(BufferedImage bufferedImage, float brightness) {
RescaleOp rescaleOp = new RescaleOp(brightness, 0, null);
return new ImageIcon(rescaleOp.filter(bufferedImage, null));
}
的调用将是这样的:
seeATemplateButton.initialize("/resources/templateIcon-regular.png", 100f, 75f, 50f, "See A Template");
//I think my 100f, 75f, 50f variables need to change, but whenever I change them it behaves unexpectedly (changes colors and stuff).
与该代码会发生什么:显示的图像“隐形”我知道它的存在,因为它是在一个JLabel用鼠标点击事件在它上面,并且工作得很好。如果我只是跳过亮度变化部分,并说setRegularIcon(new ImageIcon(Button.class.getResource(imageLocation));
它工作得很好,但显然它不是更深。
我想我需要:一些帮助理解什么offset
,scaleFactor
和filter
方法意味着/去做,因此什么号码给了亮度可变。
任何帮助将不胜感激!谢谢!
看到类似的问题:HTTP://计算器。 com/questions/3433275/adjust-brightness-and-contrast-of-bufferedimage-in-java –