Como mudar o brilho de uma imagem
Minha pergunta: Eu quero ser capaz de alterar o brilho de uma imagem de recurso e ter três instâncias como ImageIcons. Um com 50% de brilho (mais escuro), outro com 75% de brilho (um pouco mais brilhante) e finalmente outro com 100% de brilho (o mesmo que a imagem original). Eu também quero preservar a transparência.
O que eu tentei: Eu procurei por aí e parece que a melhor solução é usarRescaleOp
, mas eu não consigo entender. Eu não sei o que é o scaleFactor e o offset. Aqui está o meu código para o que eu tentei.
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));
}
A ligação seria algo assim:
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).
O que acontece com esse código: A imagem parece "invisível" Eu sei que está lá porque está em um JLabel com um evento clicado no mouse e que funciona muito bem. Se eu simplesmente pular a parte de mudança de brilho e dizersetRegularIcon(new ImageIcon(Button.class.getResource(imageLocation));
funciona muito bem, mas obviamente não é mais escuro.
O que eu acho que preciso Alguns ajudam a entender o queoffset
, scaleFactor
, e asfilter
método mean / do e, consequentemente, que números devem ser dados para a variável de brilho.
Qualquer ajuda seria muito apreciada! Obrigado!