Comment faire pour modifier la luminosité d'une Image

Ma Question: je veux être en mesure de modifier la luminosité d'une image de ressource et ont trois instances comme ImageIcons. À 50% de luminosité (donc plus sombre), l'autre à 75% de luminosité (un peu plus clair), et enfin un autre à 100% de luminosité (la même que l'image d'origine). Je tiens également à préserver la transparence.

Ce que j'ai essayé: j'ai cherché partout et il semble que la meilleure solution est d'utiliser RescaleOp, mais je ne peux pas le comprendre. Je ne sais pas ce que le scaleFactor et le décalage est tout au sujet. Voici mon code pour ce que j'ai essayé.

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));
}

L'appel serait quelque chose comme ceci:

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).

Ce qui se passe avec ce code: L'image apparaît "invisible", je sais qu'il est là parce que c'est sur un JLabel avec une souris cliqué événement sur elle et qui fonctionne très bien. Si je sautez simplement la luminosité de l'évolution de la partie et dire setRegularIcon(new ImageIcon(Button.class.getResource(imageLocation)); il fonctionne très bien, mais à l'évidence il n'est pas plus foncé.

Ce que je pense que j'ai besoin: Certains d'aide pour comprendre ce que offset, scaleFactor, et la filter méthode de dire/faire, et, par conséquent, quels sont les numéros de donner de la luminosité variable.

Toute aide serait grandement appréciée! Merci!

voir cette même question : stackoverflow.com/questions/3433275/...

OriginalL'auteur kentcdodds | 2012-10-19