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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.02.2018, 14:21
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 1  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Question BitmapData.draw и память

В очередной раз подниму вопрос BitmapData и памяти. Совсем недавно (до версии 11.3) BitmapData имела всем известные ограничения на размер, однако, с версии 11.3 Flash Player'а эти ограничения были сняты. Тем не менее, ловлю глюки на реальном проекте.
Имею: Flex-проект. Делаю скриншот объекта Spark.Group, который имеет довольно сложную вложенную структуру. При этом, размер одного из вложенных объектов около 4250x3400 пикселов, однако, изменением масштаба родительского объекта, который тоже вложен в Group, я уменьшаю размер до 270 пикселов по ширине. Затем, делаю bitmap.draw, после чего дебаггер во Flash Develop вылетает по эксепшну, при этом в трэйс вываливается ошибка от следующего вызова remoteobject, что #2158: The NetConnection Object is invalid. This may be due to a dropped NetConnection. Ну и результат неверный и приложение полностью виснет как в браузере, так и в плеере и отдебажить я его не могу. Если уменьшить размер вложенной области до 2830x2830 (набор доступных размеров устанавливается в приложении, этот - предыдущий), то работает ок. То есть, вроде бы, ограничения на размер сняты, а проблема с памятью так и осталась.
Есть ли идеи в чем может быть проблема и как это вылечить? ОС Win10, FP 28 Chrome/Standalone debugger.

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

Регистрация: Oct 2006
Сообщений: 2,281
а откуда уверенность что дело в битмапе?Очень похоже что там lazy initialization - некий запрос шлется только при отрисовке компонента, а при изменении размера то,что должно слать запрос выпадает из вьюпорта и ничего не шлет.Да и текст ошибки намекает что дело не в размере bitmapdata.
В java,например, такое сплошь и рядом: существуют только те итемы,что в данный момент видны на экране.Поэтому скриншот всей портянки listView без танцев с бубном не снимешь.
Если не делать bitmap.draw ошибки при взаимодействии с флексовыми компонентами не лезут?

Старый 13.02.2018, 06:01
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 3  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Цитата:
Сообщение от undefined Посмотреть сообщение
а откуда уверенность что дело в битмапе?Очень похоже что там lazy initialization - некий запрос шлется только при отрисовке компонента, а при изменении размера то,что должно слать запрос выпадает из вьюпорта и ничего не шлет.Да и текст ошибки намекает что дело не в размере bitmapdata.
В java,например, такое сплошь и рядом: существуют только те итемы,что в данный момент видны на экране.Поэтому скриншот всей портянки listView без танцев с бубном не снимешь.
Если не делать bitmap.draw ошибки при взаимодействии с флексовыми компонентами не лезут?
Lazy-inita нету, инфа 100%. Если закомментить bitmapdata.draw, то отрабатывает на ура.

Добавлено через 1 минуту
P.S. Ошибки при взаимодействии с компонентами отсутствуют

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Там же в справке написано, что программные ограничения были сняты, но размер всё равно зависит от операционной системы.
Единственный вариант проверить в коде это баг или нет (склоняюсь к тому, что всё-таки нет) - это попробовать в другой операционке и на более мощном железе. Лично моё мнение, там просто заканчивается лимит памяти, выделяемой операционной системой флеш плееру
__________________
Ко мне можно и нужно обращаться на ты)

Старый 13.02.2018, 18:02
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 5  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
UPD: Пробовал профайлить в Scout - по памяти никаких скачков не замечено вообще. Тесты проводились на различном железе (последний на Win10, i7, 8Gb RAM, Chrome) - все давали одно и то же - при прямом дебаге на bitmapdata.draw дебаггер FlashDevelop вываливался в internal debugger exception, затем, система автоматом пыталась посылать данные скриншота и выдавала ошибку NetConnection.

Добавлено через 6 минут
UPD2: Вроде появилась зацепка: перед снятием скриншота производилось применение маски где-то в глубине вложенной структуры. Размер маски был соизмерим с размером большой области ~ 4250x3400 px. Т.е. применяется маска, делается скриншот bitmapdata, отменяется маска. Вроде, после того, как убрали маску, все заработало. Завтра еще сам лично проверю, т.к. маски подготавливают дизайнеры в Adobe Illustrator путём экспорта в SWF.
Вопрос: могло ли это как-то вызвать такой глюк? Насколько я знаю, по маскам ограничений не существует.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Вопрос: могло ли это как-то вызвать такой глюк? Насколько я знаю, по маскам ограничений не существует.
Ну, видимо маска для растра тоже сначала перегоняется в растр
__________________
Ко мне можно и нужно обращаться на ты)

Старый 14.02.2018, 11:52
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 7  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Проблема разрешилась: дизайнеры готовили extra-large маску не пойми как. Некоторые маски оказались по непонятным причинам повреждены. Это и вызывало сбой bitmapdata.draw. После того, как перегенерировали маски все заработало!

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

Теги
bitmapdata memory draw

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

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


 


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


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