So ändern Sie die Helligkeit eines Bildes

Meine Frage: Ich möchte in der Lage sein, die Helligkeit eines Ressourcenbilds zu ändern und drei Instanzen davon als ImageIcons zu verwenden. Eine bei 50% Helligkeit (also dunkler), eine bei 75% Helligkeit (etwas heller) und schließlich eine bei 100% Helligkeit (das gleiche wie das Originalbild). Ich möchte auch Transparenz bewahren.

Was ich versucht habe: Ich habe mich umgesehen und es sieht so aus, als würde die beste Lösung verwendetRescaleOp, aber ich kann es einfach nicht herausfinden. Ich weiß nicht, worum es beim scaleFactor und beim Offset geht. Hier ist mein Code für das, was ich ausprobiert habe.

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

Der Aufruf wäre etwa so:

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

Was passiert mit diesem Code: Das Bild erscheint "unsichtbar" Ich weiß, dass es dort ist, weil es sich auf einem JLabel befindet, auf dem ein Ereignis mit einem Mausklick angeklickt ist, und das funktioniert einwandfrei. Wenn ich nur den helligkeitsändernden Teil überspringe und sagesetRegularIcon(new ImageIcon(Button.class.getResource(imageLocation)); es funktioniert gut, aber offensichtlich ist es nicht dunkler.

Was ich denke ich brauche: Einige helfen zu verstehen, wasoffset, scaleFactor, und dasfilter Methode mean / do und folglich welche Zahlen für die Helligkeitsvariable anzugeben sind.

Jede Hilfe wäre sehr dankbar! Vielen Dank!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage