Tinting Image na melhoria de Java

Procurei uma maneira fácil de colorir uma imagem em Java, mas não encontrei nada que atendesse às minhas necessidades. Eu fui para a seguinte solução:

Primeiro crie uma nova imagem que sirva como uma cópia da imagem que eu quero colorir, então eu criei uma segunda imagem que é uma máscara transparente da imagem que eu quero colorir e, em seguida, desenhe a tonalidade da minha cópia e retorne a cópia :

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

Uma solução para imagens que não tinham pixels transparentes (por exemplo, não faziam uso do canal alfa) era simplesmente usar fillRect () em toda a imagem, mas isso não funcionava em imagens com pixels transparentes como aquelas que tinham a imagem escolhida. cor em vez de ainda ser invisível.

Alguém sabe uma maneira de fazer isso de forma mais eficiente como métodos que encontrei aqui eram bastante insatisfatórios e eu planejo fazer essa coloração em muitas imagens (a maioria tendo um tom cinza-claro para elas, então elas são fáceis de serem coloridas) vezes por segundo.

A pré-geração de todas as imagens necessárias na inicialização e / ou o armazenamento em cache de imagens geradas pode ser uma solução, mas parece um pouco estranho para mim, embora, se nada puder ser feito, nada possa ser feito.

Alguém ligou isso:http://www.javalobby.org/articles/ultimate-image/

Foi útil, mas não cobriu o tingimento.

questionAnswers(1)

yourAnswerToTheQuestion