我的问题:我希望能够更改资源图像的亮度,并将其三个实例作为 ImageIcons。一张亮度为 50%(较暗),另一张亮度为 75%(稍亮),最后一张亮度为 100%(与原始图像相同)。我还想保持透明度。
我尝试过的:我四处搜寻,看起来最好的解决方案是使用RescaleOp http://docs.oracle.com/javase/6/docs/api/java/awt/image/RescaleOp.html,但我就是想不出来。我不知道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
方法的意思/做,以及因此为亮度变量给出什么数字。
任何帮助将不胜感激!谢谢!