Тема: Алгоритмы заменить медленный setPixel32
Показать сообщение отдельно
Старый 13.10.2015, 15:45
voidmain вне форума Посмотреть профиль Отправить личное сообщение для voidmain Найти все сообщения от voidmain
  № 1  
Ответить с цитированием
voidmain

Регистрация: Oct 2015
Сообщений: 4
Question заменить медленный setPixel32

Добрый день!
Мне нужно заменить "преобладающий" цвет из RGB на прозрачный.

например для удаления зеленого цвета я делаю так:

Код AS3:
sourceBmdSmall.lock();
for (var i:uint = 0; i < sourceBmdSmall.width; i++)
for (var j :uint = 0; j < sourceBmdSmall.height ; j++)
{
  var color:uint = sourceBmdSmall.getPixel(i, j);
  var rgb:Object = ColorUtil.getRGB(color);
 
  var maxColor:uint = rgb.r > rgb.b ? rgb.r : rgb.b;
  if (rgb.g > maxColor + 7)  // число 7 - некий порог с которым нужно удалить цвет
    sourceBmdSmall.setPixel32(i, j, 0x00000000);
}
sourceBmdSmall.unlock();
Т.е. вычисляем максимальное значение цвета у двух других каналов, и проверяем нужный канал исходя из этого максимального значения.
Алгоритм очень простой и очень хорошо работает в моем случае...где нужно прям вообще все преобладающие цвета из RGB удалить (красный зеленый или синий).
К сожалению на больших картинках подтормаживает(

Можно ли этот вариант сделать каким то другим способом?
Например через тот же threshold? Что то ни как не соображу.. Кстати говоря до этого удалял цвет как раз с помощью threshold, но работает все таки не так хорошо как в коде выше. Либо я не допонял возомжности threshold.