|
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
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. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
а откуда уверенность что дело в битмапе?Очень похоже что там lazy initialization - некий запрос шлется только при отрисовке компонента, а при изменении размера то,что должно слать запрос выпадает из вьюпорта и ничего не шлет.Да и текст ошибки намекает что дело не в размере bitmapdata.
В java,например, такое сплошь и рядом: существуют только те итемы,что в данный момент видны на экране.Поэтому скриншот всей портянки listView без танцев с бубном не снимешь. Если не делать bitmap.draw ошибки при взаимодействии с флексовыми компонентами не лезут? |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Цитата:
Добавлено через 1 минуту P.S. Ошибки при взаимодействии с компонентами отсутствуют |
|
|||||
Там же в справке написано, что программные ограничения были сняты, но размер всё равно зависит от операционной системы.
Единственный вариант проверить в коде это баг или нет (склоняюсь к тому, что всё-таки нет) - это попробовать в другой операционке и на более мощном железе. Лично моё мнение, там просто заканчивается лимит памяти, выделяемой операционной системой флеш плееру
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: 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. Вопрос: могло ли это как-то вызвать такой глюк? Насколько я знаю, по маскам ограничений не существует. |
|
|||||
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Проблема разрешилась: дизайнеры готовили extra-large маску не пойми как. Некоторые маски оказались по непонятным причинам повреждены. Это и вызывало сбой bitmapdata.draw. После того, как перегенерировали маски все заработало!
|
Часовой пояс GMT +4, время: 08:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
bitmapdata memory draw |
|
|