Показать сообщение отдельно
Старый 12.08.2011, 18:35
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 12  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
можно через draw с blenMode DIFFERENCE
у меня такой вариант в результате сложился, пример есть
Код AS3:
public static function bucketFill(bmd:BitmapData, x:int, y:int, color:int, tol:int = 64):void
{
	var wandColor:int = bmd.getPixel(x, y);
 
	//битмап цвета точки клика
	var tmp:BitmapData = new BitmapData(bmd.width, bmd.height, false, wandColor);
 
	//битмап разницы между оригиналом и цветом
	tmp.draw(bmd, null, null, BlendMode.DIFFERENCE);
 
	//ColorMatrixFilter, суммирующий все компоненты в синий канал
	var clrMtrx:ColorAdjust = new ColorAdjust();
	clrMtrx.setChannels(0,0,7);//всех в синий
	tmp.applyFilter(tmp, tmp.rect, ORIGIN, clrMtrx.filter);
 
	//кроем нулем что не попадает в tol
	tmp.threshold(tmp, tmp.rect, ORIGIN, "<=", tol, 0x0, 0xFF);
 
	//заливаем  то, что получилось  из точки клика
	tmp.floodFill(x, y, 0xFF000000);
 
	//красим оригинал заказанным цветом по свопадению с заливкой floodFill'ом
	bmd.threshold(tmp, tmp.rect, ORIGIN, "==",  0xFF000000, color | 0xFF000000);
 
}
сейчас уже не помню деталей, но через попиксельное округление тоже вроде бы получалось, но как-то что-то не то, ну и медленней естественно