Como substituir cor por outra cor em BufferedImage

Então, eu tenho um arquivo de imagem que tem um vulcão. Tudo o resto é 0xFFFF00FF (magenta opaco). Quero substituir todos os pixels que contêm essa cor por 0 (transparente). Até agora, meu método se parece com isso:

public static BufferedImage replace(BufferedImage image, int target, int preferred) {
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage newImage = new BufferedImage(width, height, image.getType());
    int color;

    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
            color = image.getRGB(i, j);
            if (color == target) {
                newImage.setRGB(i, j, preferred);
            }
            else {
                newImage.setRGB(i, j, color);
            }
        }
    }

    return newImage;
}

Isso funciona bem, mas parece muito lento. Vi alguém fazer isso de outra maneira, mas não tenho ideia do que estava acontecendo. Se alguém souber uma maneira melhor de fazer isso, eu gostaria muito de ouvir.

questionAnswers(3)

yourAnswerToTheQuestion