我的问题:我想改变一个资源图片的亮度并作为三个ImageIcons的不同实例展现。其中一个亮度为原图的50%(比较暗),另一个亮度为原图的75%(略微明亮),最后一个图像的亮度为原始图像的100%(与原图相同)。同时,我也想保留透明度。
我尝试过:我已经搜索了一些资料,看起来最好的解决方案是使用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
方法的意义/作用,并因此知道应该给亮度变量提供哪些值。
非常感谢任何帮助!谢谢!