Улучшение тонировки изображения в Java

Я искал простой способ подкрасить изображение в Java, но не нашел ничего, что соответствовало бы моим потребностям. Я пошел к следующему решению:

Сначала создайте новое изображение, которое служит копией изображения, которое я хочу подкрасить, затем я создаю второе изображение, которое представляет собой прозрачную маску изображения, которое я хочу подкрасить, а затем нарисую маску подкрашивания поверх моей копии и верну копию :

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

Решение для изображений, которые не имели прозрачных пикселей (например, не использовали альфа-канал), состояло в том, чтобы просто использовать fillRect () для всего изображения, но это не работало на изображениях с прозрачными пикселями, поскольку те, которые были выбраны цвет, а не оставаться невидимым.

Кто-нибудь знает способ сделать это более эффективно, так как методы, которые я нашел здесь, были довольно неудовлетворительными, и я планирую сделать это тонирование на многих изображениях (большинство из них имеют серый оттенок, чтобы их было легко тонировать) во время выполнения около 50 раз в секунду.

Предварительная генерация всех необходимых изображений при запуске и / или кэширование сгенерированных изображений может быть решением, но в некотором роде мне неловко, хотя, если ничего не поделаешь, то ничего не поделаешь.

Кто-то связал это:http://www.javalobby.org/articles/ultimate-image/

Это было полезно, но не покрывало тонирование.

Ответы на вопрос(1)

Ваш ответ на вопрос