Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.04.2012, 20:24
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 11  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Все, я понял. Буду пользовать getPixels и setPixels)

Добавлено через 24 минуты
Код AS3:
package {
 
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Rectangle;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.utils.ByteArray;
 
	public class Testvideo extends Sprite {
		private var videoURL:String = 'Deeper112.flv';
		private var connection:NetConnection;
		private var stream:NetStream;
		private var video:Video = new Video();
		public var bm:Bitmap;
 
		public function Testvideo() {
			connection = new NetConnection();
			connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			connection.connect(null);
		}
 
		private function netStatusHandler(event:NetStatusEvent):void {
			switch (event.info.code) {
				case "NetConnection.Connect.Success":
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound":
					trace("Stream not found: " + videoURL);
					break;
			}
		}
 
		private function securityErrorHandler(event:SecurityErrorEvent):void {
			trace("securityErrorHandler: " + event);
		}
 
		private function connectStream():void {
			var stream:NetStream = new NetStream(connection);
			stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			video.attachNetStream(stream);
			stream.play(videoURL);
			addChild(video);
			bm = new Bitmap();
			addChild(bm);
			bm.x = video.width+10;
			addEventListener(Event.ENTER_FRAME,onEnterHandler);
		}
 
		public function onEnterHandler(e:Event):void
		{
			var bmd:BitmapData = new BitmapData(video.width,video.height);
			var bmd2:BitmapData = new BitmapData(video.width,video.height);
			//var mtx:Matrix = new Matrix(0,0,0,0,0,0);
			//var ct:ColorTransform = new ColorTransform(1,1,1,1,10,0,0,0);
			bmd.draw(video);
			var rct:Rectangle = new Rectangle(0,0,video.width,video.height);
			var ba:ByteArray = new ByteArray();
			ba = bmd.getPixels(rct);
			//trace(ba[0]);
 
			// Преобразуем в матрицу
 
			var image:Array = new Array();
 
			for (var i:int=0;i<video.width;i++)
			{
				image[i] = new Array();
				for (var j:int=0;j<video.height;j++)
				{
					image[i][j] = ba[i*video.width+j];
				}
			}
 
			computeData(image);
 
			for (i=0;i<image.length;i++)
			{
				for (j=0;j<image[i].length;j++)
				{
					ba[i*video.width+j] = image[i][j];
				}
			}
 
			bmd2.setPixels(rct,ba);
			bm.bitmapData = bmd2;
		}
 
		public function computeData(image:Array):void
		{
			for (var i:int=0;i<image.length;i++)
			{
				for (var j:int=0;j<image[i].height;j++)
				{
					image[i][j] = 0;
				}
			}
		}
	}
}
Добавлено через 25 минут
Просьба указать на ошибки и прокатит ли такой метод?

Добавлено через 28 минут
Отображается лишь video и то, почему-то черным экраном.

Добавлено через 6 часов 54 минуты
Код AS3:
package {
 
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.utils.ByteArray;
 
	public class Testvideo extends Sprite {
		private var videoURL:String = 'Deeper112.flv';
		private var connection:NetConnection;
		private var stream:NetStream;
		private var video:Video = new Video();
		public var bm:Bitmap;
		public var bm2:Bitmap;
 
		public function Testvideo() {
			connection = new NetConnection();
			connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			connection.connect(null);
		}
 
		private function netStatusHandler(event:NetStatusEvent):void {
			switch (event.info.code) {
				case "NetConnection.Connect.Success":
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound":
					trace("Stream not found: " + videoURL);
					break;
			}
		}
 
		private function securityErrorHandler(event:SecurityErrorEvent):void {
			trace("securityErrorHandler: " + event);
		}
 
		private function connectStream():void {
			var stream:NetStream = new NetStream(connection);
			stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			video.attachNetStream(stream);
			stream.play(videoURL);
			addChild(video);
			bm = new Bitmap();
			addChild(bm);
			bm.x = video.width+10;
			bm2 = new Bitmap();
			addChild(bm2);
			bm2.y = video.height+10;
			addEventListener(Event.ENTER_FRAME,onEnterHandler);
		}
 
		public function onEnterHandler(e:Event):void
		{
			var bmd:BitmapData = new BitmapData(video.width,video.height);
			var bmd2:BitmapData = new BitmapData(video.width,video.height);
			//var mtx:Matrix = new Matrix(1,0,0,1,0,0);
			//var ct:ColorTransform = new ColorTransform(1,1,1,1,10,0,0,0);
			var rct:Rectangle = new Rectangle(0,0,video.width,video.height);
			var pt:Point = new Point(0,0);
			bm.bitmapData = bmd;
			bm2.bitmapData = bmd2;
			bmd.draw(video);
			//var ba:ByteArray = new ByteArray();
			//ba = bmd.getPixels(rct);
			//ba.position = 0;
			//trace(ba[0]);
 
			// Преобразуем в матрицу
			//bmd2.copyPixels(bmd,rct,pt);/*
			var image:Array = new Array();
 
			for (var i:uint=0;i<bmd.width;i++)
			{
				var tmp:Array = new Array();
				for (var j:uint=0;j<bmd.height;j++)
				{
					var tmp2:uint = bmd.getPixel(i,j);
					tmp.push(tmp2);
					trace(tmp2);
					//bmd2.setPixel(i,j,tmp2);
				}
				image.push(tmp);
			}
 
			computeData(image);
 
			for (i=0;i<image.length;i++)
			{
				for (j=0;j<image[i].length;j++)
				{
					bmd2.setPixel(i,j,image[i][j]);
				}
			}
		}
 
		public function computeData(image:Object):void
		{
			for (var i:uint=0;i<image.length;i++)
			{
				for (var j:uint=0;j<image[i].length;j++)
				{
					image[i][j] = 0;
				}
			}
		}
	}
}

Старый 30.04.2012, 14:09
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 12  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Bitmap и BitmapData достаточно одной.
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.geom.Rectangle;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
 
	public class Main extends Sprite 
	{
		private var videoURL:String = "f_00770c.flv";
        private var connection:NetConnection;
        private var stream:NetStream;
        private var video:Video = new Video(640, 360);
		private var bitmap:Bitmap = new Bitmap();
		private var bd:BitmapData;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			connection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            connection.connect(null);
		}
 
		private function netStatusHandler(event:NetStatusEvent):void {
            switch (event.info.code) {
                case "NetConnection.Connect.Success":
                    connectStream();
                    break;
                case "NetStream.Play.StreamNotFound":
                    trace("Stream not found: " + videoURL);
                    break;
            }
        }
 
        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
        }
 
        private function connectStream():void {
            var stream:NetStream = new NetStream(connection);
			var client:Object = new Object();
			client.onMetaData = onMetaData;
            stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			stream.client = client;
            video.attachNetStream(stream);
            stream.play(videoURL);
			bd = new BitmapData(video.width, video.height, false);
			bitmap.bitmapData = bd;
			bitmap.x = video.width;
            addChild(video);
			addChild(bitmap);
        }
 
		private function onMetaData(info:Object):void {
			trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function enterFrameHandler(event:Event):void
		{
			bd.draw(video);
			var randX:int = Math.random() * video.width - 20;
			var randY:int = Math.random() * video.height - 20;
			var rect:Rectangle = new Rectangle(randX, randY, 20, 20);
 
			bd.fillRect(rect, 0x00FF0000);
		}
	}
}
Добавлено через 5 минут
Если хотите получить массив значений пикселей, используйте метод getVector. "Преобразовывать в матрицу" смысла нет.
Цитата:
Код AS3:
public function computeData(image:Object):void
{
	for (var i:uint=0;i<image.length;i++)
	{
		for (var j:uint=0;j<image[i].length;j++)
		{
			image[i][j] = 0;
		}
	}
}
Вы хотите залить все черным цветом? fillRect справится быстрее.
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 30.04.2012 в 14:14.
Старый 30.04.2012, 15:22
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 13  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Осталась лишь проблема с производительностью. Решил посредством таймера, чтоб частоту кадров не трогать.
Но ищу доп. способы повышения произв-ти.
Сейчас у меня в цикле формируется массив getPixel'ем. Надо получить все-таки нормальный byteArray getPixels'ом и getVector заюзать.

Цитата:
Вы хотите залить все черным цветом? fillRect справится быстрее.
Это проверка была, на работоспособность)))))

Вот сегментация изображения на 16 уровней. Но это тоже как бы проверка на работоспособность...

Код AS3:
public function computeData(image:Object):void
		{
			for (var i:uint=0;i<image.length;i++)
			{
				for (var j:uint=0;j<image[i].length;j++)
				{
					var pixelValue:uint = image[i][j];
					var red:uint = pixelValue >> 16 & 0xFF;
					var green:uint = pixelValue >> 8 & 0xFF;
					var blue:uint = pixelValue & 0xFF;
 
					//red = Math.min(red+10,255);//+(Math.random()-0.5)*10;
					//green = Math.min(green+10,255);//+(Math.random()-0.5)*10;
					//blue = Math.min(blue+10,255);//+(Math.random()-0.5)*10;*/
						/*
					//green = red = blue;
 
					//var module:Number = Math.sqrt(red*red+green*green+blue*blue);
					//if (red > 127) var color:uint = 0xFFFFFF; else color = 0;*/
 
					var cnt:uint = 16;
 
					for(var k:uint=0;k<cnt;k++)
					{
						var nporog:uint = k/cnt*256;
						var vporog:uint = (k+1)/cnt*256;
						if (red>=nporog && red<vporog) 
							var color:uint = (nporog+vporog)/2;
					}
 
					image[i][j] = color*256*256+color*256+color;//uint(red*256*256+green*256+blue)
 
				}
			}
		}


Последний раз редактировалось sephira; 30.04.2012 в 15:41.
Старый 30.04.2012, 15:33
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 14  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
sephira, почитайте о threshold.

Добавлено через 2 минуты
Цитата:
Решил посредством таймера, чтоб частоту кадров не трогать.
Зачем вам таймер? По какому условию у вас должна происходить перерисовка?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.04.2012, 15:44
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 15  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Цитата:
Зачем вам таймер? По какому условию у вас должна происходить перерисовка?
А какая разница? Для моих задач, я пока что могу хоть 2 кадра в секунду брать, если на каждый кадр серьезное время на обработку уходит)
По сути даже не кадра, а скриншота. Для моих задач подходит)

Старый 30.04.2012, 15:46
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 16  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
У вас еще нет серьезной обработки, есть корявая реализация.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.04.2012, 15:49
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 17  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Цитата:
Сообщение от alatar Посмотреть сообщение
У вас еще нет серьезной обработки, есть корявая реализация.
Согласен. Я выше написал, что буду искать способы повышения производительности, за счет улучшения кода в том числе. Почитаю еще раз про getVector, чтоб понять подойдет ли мне. Мне нужно работать в растровой системе координат. И двухмерный массив вроде как лучше всего подходит.

Добавлено через 1 час 1 минуту
C getVector'ом работает медленней.
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.geom.Rectangle;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
 
	public class Testvideo extends Sprite 
	{
		private var videoURL:String = "Deeper112.flv";
		private var connection:NetConnection;
		private var stream:NetStream;
		private var video:Video = new Video(640, 360);
		private var bitmap:Bitmap = new Bitmap();
		private var bd:BitmapData;
 
		public function Testvideo():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			connection = new NetConnection();
			connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			connection.connect(null);
		}
 
		private function netStatusHandler(event:NetStatusEvent):void {
			switch (event.info.code) {
				case "NetConnection.Connect.Success":
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound":
					trace("Stream not found: " + videoURL);
					break;
			}
		}
 
		private function securityErrorHandler(event:SecurityErrorEvent):void {
			trace("securityErrorHandler: " + event);
		}
 
		private function connectStream():void {
			var stream:NetStream = new NetStream(connection);
			var client:Object = new Object();
			client.onMetaData = onMetaData;
			stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			stream.client = client;
			video.attachNetStream(stream);
			stream.play(videoURL);
			bd = new BitmapData(video.width, video.height, false);
			bitmap.bitmapData = bd;
			bitmap.x = video.width;
			addChild(video);
			addChild(bitmap);
		}
 
		private function onMetaData(info:Object):void {
			trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function enterFrameHandler(event:Event):void
		{
			bd.draw(video);
			var v:Vector.<uint> = new Vector.<uint>();
			var rct:Rectangle = new Rectangle(0,0,bd.width,bd.height);
			v = bd.getVector(rct);
			var image:Array = new Array();
			for (var i:uint=0;i<bd.width;i++)
			{
				var tmp:Array = new Array();
				for (var j:uint=0;j<bd.height;j++)
				{
					var tmp2:uint = v[i*bd.width+j];
					tmp.push(tmp2);
					trace(tmp2);
				}
				image.push(tmp);
			}
 
			//computeData(image);
 
			for (i=0;i<image.length;i++)
			{
				for (j=0;j<image[i].length;j++)
				{
					v[i*image.length+j] = image[i][j];
				}
			}
			bd.setVector(rct,v);
		}
 
		public function computeData(image:Object):void
		{
			for (var i:uint=0;i<image.length;i++)
			{
				for (var j:uint=0;j<image[i].length;j++)
				{
					/*var pixelValue:uint = image[i][j];
					var red:uint = pixelValue >> 16 & 0xFF;
					var green:uint = pixelValue >> 8 & 0xFF;
					var blue:uint = pixelValue & 0xFF;
 
					//red = Math.min(red+10,255);//+(Math.random()-0.5)*10;
					//green = Math.min(green+10,255);//+(Math.random()-0.5)*10;
					//blue = Math.min(blue+10,255);//+(Math.random()-0.5)*10;*/
					/*
					//green = red = blue;
 
					//var module:Number = Math.sqrt(red*red+green*green+blue*blue);
					//if (red > 127) var color:uint = 0xFFFFFF; else color = 0;
 
					var cnt:uint = 2;
 
					for(var k:uint=0;k<cnt;k++)
					{
					var nporog:uint = k/cnt*256;
					var vporog:uint = (k+1)/cnt*256;
					if (red>=nporog && red<vporog) 
					var color:uint = (nporog+vporog)/2;
					}
 
					image[i][j] = color*256*256+color*256+color;//uint(red*256*256+green*256+blue)*/
					/*var pixelValue:uint = image[i][j];
					var red:uint = pixelValue >> 16 & 0xFF;
					var green:uint = pixelValue >> 8 & 0xFF;
					var blue:uint = pixelValue & 0xFF;
 
					if (red > 127) var color:uint = 0xFFFFFF; else color = 0;
					image[i][j] = color*256*256+color*256+color;
 
					var k:uint = (i-1>=0) ? i-1 : 0;
					var z:uint = (j-1>=0) ? j-1 : 0;
 
					//image[i][j] = Math.abs(image[i][j]-image[k][z]);*/
 
					image[i][j] = 0;
 
				}
			}
		}
	}
}


Последний раз редактировалось sephira; 30.04.2012 в 15:53.
Старый 30.04.2012, 16:56
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 18  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вот это:
Код AS3:
var image:Array = new Array();
for (var i:uint=0;i<bd.width;i++)
{
	var tmp:Array = new Array();
	for (var j:uint=0;j<bd.height;j++)
	{
		var tmp2:uint = v[i*bd.width+j];
		tmp.push(tmp2);
		trace(tmp2);
	}
	image.push(tmp);
}
и вот это:
Код AS3:
for (i=0;i<image.length;i++)
{
	for (j=0;j<image[i].length;j++)
	{
		v[i*image.length+j] = image[i][j];
	}
}
выкиньте и будет быстрее. Этот код не имеет смысла.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.04.2012, 17:13
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 19  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Остановился пока на этом коде.
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.geom.Rectangle;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.utils.ByteArray;
	import flash.utils.Timer;
 
	public class Testvideo extends Sprite 
	{
		private var videoURL:String = "Deeper112.flv";
		private var connection:NetConnection;
		private var stream:NetStream;
		private var video:Video = new Video(480, 360);
		private var bitmap:Bitmap = new Bitmap();
		private var bitmap2:Bitmap = new Bitmap();
		private var bd:BitmapData;
		private var bd2:BitmapData;
		public var myTimer:Timer = new Timer(50);
 
		public function Testvideo():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			connection = new NetConnection();
			connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
			connection.connect(null);
		}
 
		private function netStatusHandler(event:NetStatusEvent):void {
			switch (event.info.code) {
				case "NetConnection.Connect.Success":
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound":
					trace("Stream not found: " + videoURL);
					break;
			}
		}
 
		private function securityErrorHandler(event:SecurityErrorEvent):void {
			trace("securityErrorHandler: " + event);
		}
 
		private function connectStream():void {
			var stream:NetStream = new NetStream(connection);
			var client:Object = new Object();
			client.onMetaData = onMetaData;
			stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
			stream.client = client;
			video.attachNetStream(stream);
			stream.play(videoURL);
			bd = new BitmapData(video.width, video.height, false);
			bd2 = new BitmapData(video.width, video.height, false);
			bitmap.bitmapData = bd2;
			bitmap.x = video.width;
			bitmap2.bitmapData = bd;
			addChild(video);
			addChild(bitmap);
		}
 
		private function onMetaData(info:Object):void {
			trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
			myTimer.addEventListener("timer", enterFrameHandler);
			myTimer.start();
		}
 
		private function enterFrameHandler(event:Event):void
		{
			bd.draw(video);
			var image:Array = new Array();
			for (var i:uint=0;i<bd.width;i++)
			{
				image[i] = new Array();
				for (var j:uint=0;j<bd.height;j++)
				{
					image[i][j] = bd.getPixel(i,j);
				}
			}
 
			computeData(image);
 
			for (i=0;i<image.length;i++)
			{
				for (j=0;j<image[i].length;j++)
				{
					bd2.setPixel(i,j,image[i][j]);
				}
			}
		}
 
		public function computeData(image:Array):void
		{
			segmentation(image,4);
		}
 
		public function binarization(image:Array):void
		{
			for (var i:uint=0;i<image.length;i++)
			{
				for (var j:uint=0;j<image[i].length;j++)
				{
					var pixelValue:uint = image[i][j];
					var red:uint = pixelValue >> 16 & 0xFF;
					var green:uint = pixelValue >> 8 & 0xFF;
					var blue:uint = pixelValue & 0xFF;
 
					if (red > 127) var color:uint = 0xFFFFFF; else color = 0;
					image[i][j] = color*256*256+color*256+color;
				}
			}
		}
 
		public function segmentation(image:Array,cnt:uint):void
		{
			for (var i:uint=0;i<image.length;i++)
			{
				for (var j:uint=0;j<image[i].length;j++)
				{
					var pixelValue:uint = image[i][j];
					var red:uint = pixelValue >> 16 & 0xFF;
					var green:uint = pixelValue >> 8 & 0xFF;
					var blue:uint = pixelValue & 0xFF;
 
					for(var k:uint=0;k<cnt;k++)
					{
						var nporog:uint = k/cnt*256;
						var vporog:uint = (k+1)/cnt*256;
						if (red>=nporog && red<vporog) 
							var color:uint = (nporog+vporog)/2;
					}
					image[i][j] = color*256*256+color*256+color;
				}
			}
		}
 
	}
}
Добавлено через 2 минуты
Цитата:
выкиньте и будет быстрее. Этот код не имеет смысла.
Тогда надо методы типа getUint(i,j) и setUint(i,j,u:uint) к классу вектор прицепить.

Добавлено через 3 минуты
Повторяюсь, для всех методов, которые надо будет реализовать нужна растровая система координат.

Старый 30.04.2012, 17:27
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 20  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Ни одному из этих двух методов "растровая система координат" не нужна.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.