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.