La mia domanda: Desidero poter modificare la luminosità di un'immagine di risorsa e avere tre istanze di essa come ImageIcons. Uno al 50% di luminosità (quindi più scuro), un altro al 75% di luminosità (un po 'più luminoso) e infine un altro al 100% di luminosità (lo stesso dell'immagine originale). Voglio anche preservare la trasparenza.Come modificare la luminosità di un'immagine
Quello che ho provato: Ho cercato in giro e sembra che la soluzione migliore sta utilizzando RescaleOp
, ma non riesco proprio a capirlo. Non so cosa sia il fattore di scala e l'offset. Ecco il mio codice per quello che ho provato.
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));
}
La chiamata sarebbe qualcosa di simile a questo:
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).
Che cosa succede con quel codice: L'immagine appare "invisibile" So che è lì perché è su una JLabel con un evento del mouse cliccato su di esso e che funziona bene. Se salterò la parte che cambia luminosità e dico setRegularIcon(new ImageIcon(Button.class.getResource(imageLocation));
funziona perfettamente, ma ovviamente non è più scura.
Quello che penso che ho bisogno: Qualche aiuto capire cosa offset
, scaleFactor
, e il metodo filter
significano/fanno, e di conseguenza quello che i numeri per dare per la variabile della luminosità.
Qualsiasi aiuto sarebbe molto apprezzato! Grazie!
vedono questa domanda simile: http: // StackOverflow. it/questions/3433275/adjust-brightness-and-contrast-of-bufferedimage-in-java –