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

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
Код AS3:
var width:int = sourceBmdSmall.width;
var height:int = sourceBmdSmall.height;
var rect:Rectangle = sourceBmdSmall.rect;
var point:Point = new Point();
 
var greenChannel:BitmapData = new BitmapData( width, height, false, 0xFFFFFFFF );
greenChannel.copyChannel( sourceBmdSmall, sourceBmdSmall.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.RED );
greenChannel.copyChannel( sourceBmdSmall, sourceBmdSmall.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN );
greenChannel.copyChannel( sourceBmdSmall, sourceBmdSmall.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.BLUE );
// 0xGGGGGG
 
var a:BitmapData = sourceBmdSmall.clone();
a.draw( greenChannel, null, null, BlendMode.LIGHTEN ); // a = max( src, 0xGGGGGG )
 
a = a.compare( sourceBmdSmall ) as BitmapData; // a = a - source
 
var b:BitmapData = new BitmapData( width, height, false, 0 );
b.threshold( a, rect, point, ">", 0x070000, 0xFFFF0000, 0xFF0000 ); // g - r > 7
 
var c:BitmapData = new BitmapData( width, height, false, 0 );
c.threshold( a, rect, point, ">", 0x000007, 0xFFFF0000, 0xFF0000 ); // g - b > 7
 
b.merge( c, rect, point, 128, 128, 128, 128 ); // f0.5 * 0xFF0000 + f0.5* 0xFF0000 == 0xFF0000
 
sourceBmdSmall.threshold( b, rect, point, "==", 0xFF0000, 0x00000000, 0x00FF0000 ); // 0xFF00FF ? 0x00000000 : dst
извращение.. но вырезает зелёный.)