Показать сообщение отдельно
Старый 01.08.2011, 18:03
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
В 10 плеере у БитмапДаты появился метод getVector, возвращающий Вектор с ARGB-значениями всех пикселей заданного прямоугольника битмапдаты. Например
Код AS3:
......
var tmpSh:Shape = new Shape();
tmpSh.graphics.beginFill(0xFF00FF, 1);
tmpSh.graphics.drawRect(5, 5, 20, 20);// drawPath(commands, data);
tmpSh.graphics.endFill();
var pixelValue:uint, pixelValueMask:uint, i:int = 0, j:int = 0;
var bmpdata:BitmapData = new BitmapData(tmpSh.width, tmpSh.height, false, 0xFF0000); 
bmpdata.draw(tmpSh);
var pixels:Vector.<uint> = bmpdata.getVector(bmpdata.rect);
var palette:Vector.<uint> = pixels.sort(descSort).filter(uniqueSort);
trace( vectorColorsToString(palette, 6, "#") );
}
 
private function uniqueSort(item:uint, index:int, vector:Vector.<uint>):Boolean
{
	if (index === 0) return true;
	return (item !== vector[index - 1]);
}
 
private function descSort(x:uint, y:uint):Number
{
	if (x < y) return 1;
	if (x > y) return -1;
	return 0;
}
 
private function vectorColorsToString(vector:Vector.<uint>, digits:uint = 6, prefix:String = "0x"):Vector.<String>
{
	var colors:Vector.<String> = new Vector.<String>();
	for (var i:uint = 0; i < vector.length; i++)
	{
		var color:String = vector[i].toString(16);
		color = "00000000" + color;
		color = color.substr(color.length - digits, digits);
		colors.push(prefix + color);
	}
	return colors;
}
__________________
Reality.getBounds(this);