Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прогресс создания ByteArray (http://www.flasher.ru/forum/showthread.php?t=210899)

undefined 24.05.2015 21:32

Цитата:

Хотелось бы заранее как-то вычислять максимально доступное разрешение.
А почему бы не узнать версию Flash Player и по ней определять какая максимальная БитмапДата доступна?
Цитата:

Кстати, я пробовал уже этот энкодер, что из ссылки.
Зато сорцы доступны а с штатным особо ничего не сделаешь единственное что можно - вынести его в отдельный воркер.Но опять таки если прогресс в процентах показывать особо не надо, а просто хочется чтоб не висло все на время кодирования - то можно и штатный кодер задействовать

Alex626 24.05.2015 21:42

Цитата:

Сообщение от undefined (Сообщение 1182749)
А почему бы не узнать версию Flash Player и по ней определять какая максимальная БитмапДата доступна?

Компилирую под 11.4 - там вроде уже вообще нет ограничений, как, например, в 10 версии. Но что странно - всё равно выдаёт ошибку. Хотя и на гораздо бОльшем разрешении. Там написано в доках, что теперь только возможности ОС как-то ограничивают максимальное разрешение. А вот как именно - тут вопрос.


Цитата:

Сообщение от undefined (Сообщение 1182749)
Зато сорцы доступны а с штатным особо ничего не сделаешь единственное что можно - вынести его в отдельный воркер.Но опять таки если прогресс в процентах показывать особо не надо, а просто хочется чтоб не висло все на время кодирования - то можно и штатный кодер задействовать

Надо будет попробовать. В конце концов, использовать нативный кодер, а вместо прогресс бара сделать псевдо-индикатор, который будет постепенно доходить до 100% с троеточием, либо обрываться, если нужно было меньше времени.

А вообще, для работы с памятью у нас есть какие-либо возможности во флеше?

undefined 24.05.2015 21:49

Цитата:

А вот как именно - тут вопрос
Делать финт с try..catch() в начале работы 1 раз и запоминать макс. размер и не надо его запускать на каждый чих юзера.В процессе работы флэшки этот параметр меняться не будет

Цитата:

А вообще, для работы с памятью у нас есть какие-либо возможности во флеше?
пакет flash.system

Alex626 29.05.2015 01:35

Выяснил, что вариант через цикл вычислять допустимый размер битмап-даты не катит - слишком медленно. Но у меня получилось, что максимальный размер, который можно снять - примерно 21874х24434. Далее уже будет ошибка BitmapData. Но истинно ли это для других компьютеров? Ведь в доках сказано, что возможный размер BitmapData зависит от системы, начиная с Flash Player 11.

Вот сегодня пробовал работать с памятью. Так и не понял, каким образом можно вычислить размер (в байтах) моей BitmapData, и главное, как узнать количество памяти, доступной в системе для флеша?

Код AS3:

var sizeX = mySprite.width*scale;
 
var resmem:String = Number(Math.pow(sizeX,2) *4 / 1024 / 1024).toFixed( 2 )+ "Mb";
var mem:String = Number( System.totalMemory / 1024 / 1024 ).toFixed( 2 ) + "Mb";
var freemem:String = Number( System.freeMemory / 1024 / 1024 ).toFixed( 2 ) + "Mb";
 
trace("resmem: "+resmem+" total used memory: "+mem + " total free memory: "+freemem);
//пример resmem: 1740.29Mb total used memory: 27.64Mb total used memory: 2.25Mb

Размер битмапдаты высчитывал приблизительно. Остальное выдаёт какие-то совсем уж необычные результаты, вроде "свободно 27 Мб, использовано 2.25 Мб"... Динамически что ли память берётся? Тогда вопрос, как мне узнать, что она вот-вот закончится?

undefined 29.05.2015 03:22

Цитата:

Выяснил, что вариант через цикл вычислять допустимый размер битмап-даты не катит - слишком медленно.
Еще раз, в начале один раз все посчитать и запомнить не должно сильно затормозить.Это ведь не переменная величина.
Цитата:

Так и не понял, каким образом можно вычислить размер (в байтах) моей BitmapData
Есть метод flash.sampler.getSize(), но он работает только в дебаг-плеере.Альтернатива - перегонять битмапДату в ByteArray через метод writeObject и смотреть его свойство length.Хотя я не понимаю зачем эти выкрутасы с памятью.

in4core 29.05.2015 12:23

GПрелоадер кстати делается просто : как только операция начинает работу - показываем прилоадер. Как только завеоршает - снимаем.
Прям дословно так
Код AS3:

showPreloader()
operationBitmapData() // хоть час пусть выполняется, пока не выполнится следующая строчка не пройдет
hidePreloader();


undefined 29.05.2015 15:08

in4core,ТС хочет чтоб анимацию прелодера не зависала пока идет
operationBitmapData()

in4core 29.05.2015 19:32

ну чтоб не зависала то ЖС можно или воркер - да.

AlexCooper 30.05.2015 14:38

Я для сих целей использую as3corelib и разбиение на блоки с запуском/продолжение по сетТаймаут после последней итерации

Alex626 30.05.2015 15:46

Разобрался с циклом. Я в начале делал не слишком-то рационально - искал с начала в конец. Решил проблему поиском от бОльшего к меньшему. Теперь где-то на 2 секунды подвисает, и вызывается проверка только после выброса первой ошибки создания BitmapData (в этом случае высчитывается по другой функции макс. разрешение через цикл, устанавливаются новые параметры и корректируется шкала в GUI).

Но вообще, интересно, как можно разбить на блоки. AlexCooper, расскажите, пожалуйста, больше.


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

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