Imagen de tintado en mejora de Java

Busqué una manera fácil de tintar una imagen en Java pero no encontré nada que se ajustara a mis necesidades. Fui a la siguiente solución:

Primero cree una nueva imagen que sirva como una copia de la imagen que quiero tintar, luego creo una segunda imagen que es una máscara transparente de la imagen que quiero tintar y luego dibuje la máscara de tinte sobre mi copia y devuelvo la copia :

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

Una solución para las imágenes que no tenían píxeles transparentes (p. Ej., No hizo uso del canal alfa) fue simplemente usar fillRect () en toda la imagen, pero eso no funcionó en imágenes con píxeles transparentes, ya que aquellas tenían la opción elegida. Color en lugar de seguir siendo invisible.

¿Alguien sabe una manera de hacer esto de manera más eficiente, ya que los métodos que encontré aquí son bastante insatisfactorios y planeo hacer este tinte en muchas imágenes (la mayoría con un tono gris-ish para que sean fáciles de teñir) en un tiempo de ejecución de aproximadamente 50 veces por segundo

La generación previa de todas las imágenes necesarias en el inicio y / o el almacenamiento en caché de las imágenes generadas puede ser una solución, pero me parece incómodo de alguna manera, aunque si no se puede hacer nada, entonces no se puede hacer nada.

Alguien vinculó esto:http://www.javalobby.org/articles/ultimate-image/

Fue útil pero no cubrió el tintado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta