我的问题:我希望能够更改资源图像的亮度并将其三个实例作为 ImageIcons。一个亮度为 50%(如此暗),另一个亮度为 75%(稍微亮一点),最后另一个亮度为 100%(与原始图像相同)。我也想保持透明度。
我试过的:我四处搜索,看起来最好的解决方案是 using RescaleOp
,但我就是想不通。我不知道 scaleFactor 和 offset 是什么意思。这是我尝试过的代码。
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
方法的含义/作用,以及因此为亮度变量提供的数字。
任何帮助将不胜感激!谢谢!