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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.11.2006, 17:31
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 21  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А зачем их копировать из картинки в массив, чтобы потом в другую картинку вставлять? Не проще напрямую getPixel из одной и setPixel в другую?

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

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
Я пикселы храню в массиве ,чтобы потом генерить случайные эл-ты массива содержащие инфу о пикселах ,вставлять их в битмапДату и удалять эти эл-ты из массива , чтобы не сгенерить их повторно. во

Старый 28.11.2006, 17:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 23  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Всё, у меня вывих мозга.

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

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
Ух ты убираешь: this.myarray.splice(pixelNumber-1,1);
и производительность в раз 5 возрастает

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

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
теперь вопрос:как избежать повторения пикселов?

Старый 28.11.2006, 19:26
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 26  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
Цитата:
Сообщение от vapes
теперь вопрос:как избежать повторения пикселов?
Если я правильно понял задачу, то я бы сделал так:
Код:
// массив с точками
var ar:Array = new Array();
// размеры картинки
var bitmapWidth:Number = 100;
var bitmapHeight:Number = 100;
// собираем в массив координаты всех точек
for (var i:Number=0; i<bitmapHeight; i++) {
	for (var j:Number=0; j<bitmapWidth; j++) ar.push(new Point(j, i));
}

// перетасовываем массив по алгоритму Fisher-Yates
var a:Number = ar.length;
var b:Point, c:Number;
while(a--) {
	c = Math.floor(Math.random()*(a+1));
	b = ar[c];
	ar[c] = ar[a];
	ar[a] = b;
};
  
// Тестируем что получилось

// Сделаем текстовые картинки
var myBitmapData:BitmapData = new BitmapData(bitmapWidth, bitmapHeight, false, 0xFF0000);
var resultBitmapData:BitmapData = new BitmapData(bitmapWidth, bitmapHeight, false, 0xFF);
addChild(new Bitmap(resultBitmapData))
// выводим случайные точки по enterFrame
addEventListener(Event.ENTER_FRAME, onDraw);

function onDraw(e:Event):void {
	var n:int = 200; // выводим 200 точек
	while (n-- && ar.length) {
		// берем следующую точку
		var pixel:Point = ar.pop();
		// рисуем ее
		trace("Draw:", pixel.x, pixel.y);
		resultBitmapData.setPixel(pixel.x, pixel.y, myBitmapData.getPixel(pixel.x, pixel.y));
	}
}
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

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

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Цитата:
Сообщение от MerlinTwi
Если я правильно понял задачу, то я бы сделал так:
Код:
...............
function onDraw(e:Event):void {
	var n:int = 200; // выводим 200 точек
	while (n-- && ar.length) {
		// берем следующую точку
		var pixel:Point = ar.pop();
		// рисуем ее
		trace("Draw:", pixel.x, pixel.y);
		resultBitmapData.setPixel(pixel.x, pixel.y, myBitmapData.getPixel(pixel.x, pixel.y));
	}
}
кхм тоже правильно, но не рационально... именно в этой части
Код:
	var n:int = 200; // выводим 200 точек
	while (n-- && ar.length) {
		// берем следующую точку
		var pixel:Point = ar.pop();
лишний поп, лишнее вычисление ar.length, ......

в идеале для скорости было красиво просто хранить начальный индекс в массиве и количество выводимых точек.

Код:
var currentPos : number = 0;
........
var countPoint : number  =  ((currentPos+200)> ar.length) ? 200 : ar.length-currentPos
var pixel:Point;
while (countPoint >0) {
 pixel = ar[countPoint + currentPos ];
trace("Draw:", pixel.x, pixel.y);
		resultBitmapData.setPixel(pixel.x, pixel.y, myBitmapData.getPixel(pixel.x, pixel.y));
countPoint--;
}
currentPos+=countPoint ;
if (currentPos>ar.length) trace ("the end");
)
ну а в самом конце просто бахать наш массив и все
__________________
33 коровы


Последний раз редактировалось __i; 28.11.2006 в 19:57.
Старый 28.11.2006, 20:22
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 28  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
юзайте byteArray для хранения больших массивов чисел - там сумасшедшая скорость....
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

Старый 28.11.2006, 22:32
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 29  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
byteArray действительно быстрее, но в данном случае сомнительно его применение. Как красиво и быстро перетасовать поток байтов я не представляю.
Если говорить об оптимизации, то следует еще при копировании точек лочить битмап:
Код:
resultBitmapData.lock();
while (n-- && ar.length) {
 ...
}
resultBitmapData.unlock();
P.S.
Кстати, можно устроить соревнование на создание наиболее быстрого алгоритма для решения этой задачи, есть желающие?
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 28.11.2006, 22:40
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 30  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Цитата:
Сообщение от MerlinTwi
P.S.
Кстати, можно устроить соревнование на создание наиболее быстрого алгоритма для решения этой задачи, есть желающие?
Если будут хорошие идеи, обязательно выложу здесь
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

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

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

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


 


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


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