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.