Barwienie obrazu w poprawie Java

Szukałem łatwego sposobu na zabarwienie obrazu w Javie, ale nie znalazłem niczego, co odpowiadałoby moim potrzebom. Poszedłem do następującego rozwiązania:

Najpierw utwórz nowy obraz, który posłuży jako kopia obrazu, który chcę zabarwić, a następnie utworzę drugi obraz, który jest przezroczystą maską obrazu, który chcę zabarwić, a następnie narysuj odcień - zamaskuj moją kopię i zwróć kopię :

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

Rozwiązaniem dla obrazów, które nie miały przezroczystych pikseli (np. Nie korzystały z kanału alfa), było po prostu użycie fillRect () na całym obrazie, ale to nie działało na obrazach z przezroczystymi pikselami, ponieważ te miały wtedy wybrane kolor zamiast nadal być niewidocznym.

Czy ktoś wie, jak to zrobić bardziej efektywnie, ponieważ metody, które tu znalazłem, były raczej niezadowalające i planuję to zabarwienie na wielu obrazach (większość z nich ma szary odcień, aby były łatwe do zabarwienia) w czasie pracy około 50 razy na sekundę.

Pre - Generowanie wszystkich potrzebnych obrazów przy uruchamianiu i / lub buforowanie wygenerowanych obrazów może być rozwiązaniem, ale wydaje mi się to niewygodne, chociaż jeśli nic nie da się zrobić, nic nie da się zrobić.

Ktoś to połączył:http://www.javalobby.org/articles/ultimate-image/

To było pomocne, ale nie obejmowało barwienia.

questionAnswers(1)

yourAnswerToTheQuestion