Tönen von Bildern in der Java-Verbesserung

Ich suchte nach einer einfachen Möglichkeit, ein Bild in Java einzufärben, fand aber nichts, was meinen Bedürfnissen entsprach. Ich bin zu folgender Lösung gegangen:

Zuerst erstelle ich ein neues Bild, das als Kopie des Bildes dient, das ich tönen möchte, dann erstelle ich ein zweites Bild, das eine transparente Maske des Bildes ist, das ich tönen möchte, und ziehe dann die Tönungsmaske über meine Kopie und sende die Kopie zurück :

public static BufferedImage tintImage(Image original, int r, int g, int b){
    int width = original.getWidth(null);
    int height = original.getHeight(null);
    BufferedImage tinted = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
    Graphics2D graphics = (Graphics2D) tinted.getGraphics();
    graphics.drawImage(original, 0, 0, width, height, null);
    Color c = new Color(r,g,b,128);
    Color n = new Color(0,0,0,0);
    BufferedImage tint = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
    for(int i = 0 ; i < width ; i++){
        for(int j = 0 ; j < height ; j++){
            if(tinted.getRGB(i, j) != n.getRGB()){
                tint.setRGB(i, j, c.getRGB());
            }
        }
    }
    graphics.drawImage(tint, 0, 0, null);
    graphics.dispose();
    return tinted;
}

Eine Lösung für Bilder, die keine transparenten Pixel hatten (z. B. den Alpha-Kanal nicht nutzten), bestand darin, einfach fillRect () für das gesamte Bild zu verwenden, dies funktionierte jedoch nicht für Bilder mit transparenten Pixeln, wie sie damals ausgewählt waren Farbe statt immer noch unsichtbar zu sein.

Kennt jemand einen Weg, um dies effizienter zu machen, da die Methoden, die ich hier gefunden habe, eher unbefriedigend waren und ich plane, diese Tönung auf vielen Bildern (die meisten haben einen Grauton, so dass sie leicht getönt werden können) zur Laufzeit von etwa 50 durchzuführen mal pro Sekunde.

Das vorab Generieren aller benötigten Images beim Start und / oder Zwischenspeichern der generierten Images könnte eine Lösung sein, aber es ist mir irgendwie unangenehm, obwohl nichts getan werden kann, wenn nichts getan werden kann.

Jemand hat das verlinkt:http://www.javalobby.org/articles/ultimate-image/

Es war hilfreich, deckte aber nicht das Abtönen ab.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage