Возможно, вы ответили на вопрос самостоятельно.
Я думаю, что для вашего первого подхода потребуются только два прозрачных изображения: одно с пикселями частей, которые должны изменить цвет, другое с остальным изображением.Вы будете использовать colorTransform или ColorMatrix фильтр в каждом конкретном случае.Может ли даже работать с наличием пикселей, нуждающихся в смене цвета в Sprite с плоским цветом, наложенным на оверлей?Недостатком будет то, что вам нужно будет создать «карту цветов» / набор пикселей для замены для каждого отдельного элемента, который будет нуждаться в замене цвета.
Для второго подхода: вы можете изолировать области, используя что-то вроде порог () .
Для скорости вам может потребоваться либо сохранить индексы пикселей, которые необходимо заменить, в векторе. объект, который можно использовать в сочетании с методом BitmapData getVector () ,(Вы должны выполнить цикл один раз, чтобы получить индексы пикселей, которые необходимо заменить)
Поскольку вы будете использовать одно и то же изображение (одинаковые размеры), чтобы заполнить одно и то же содержимое другим цветом, вы всегда будете проходить по циклуте же пиксели.Также имейте в виду, что вы немного увеличите скорость, используя lock () перед циклом для setPixel () и unlock () после цикла.
В качестве альтернативы вы можете использовать Pixel Bender и попробовать некоторые методы вычитания зеленого экрана / фона.Он должен быть быстрым и не задерживать выполнение остальной части вашего кода as3, так как код Pixel Bender выполняется в своем собственном потоке.
Также проверьте технику вычитания Pixel Bender Ли.
Хотя сейчас оно немного старое, но вы также можете использовать некоторые знания из статьи @ Quasimondo.
HTH