![]() |
BitmapData в AMF
Здравствуйте.
Создаю файл данных через Flash (flex/Air). Сначала создаю: Код AS3:
Код AS3:
А битмамДата при открытие этого файла возвращает просто Object, который "невозможно преобразовать в BitmapData". |
Визуальные объекты в AMF не кодируются (судя по спецификации AMF)
|
Как в таком случаем можно сохранить визуальный объект в файл...для последующего извлечения?
|
Если BitmapData - то есть getVector(), который можно записать в исходном виде, либо записать в ByteArray и сжать
|
Спасибо. getVector помогло..
|
AMF может технически сериализовать любой класс, проблема в другом: при десириализации могут случится две вещи, с которыми AMF никак не справится:
- обязательные аргументы у конструктора. - реализация и состояние класса не были сериализированы, и поэтому восстановить их никак не получится. Каким образом AMF записывает объекты: если это один из 13 предопределенных типов - смотри документацию. Если это объект пользовательского класса (в этом случае считаем, что BitmapData - пользовательский класс), то будет записан Object тег + таблиза запечатанных свойств, значения (в том же порядке, что и свойства) +, если класс динамический, список ключей-значений. Пиксели BitmapData не фигурируют ни в одном из ее свойств, а сериализатор не знает о том, как нужно сериализовать экземпляры этого класса, поэтому он запишет экземпляр как объект типа Object с ключами-значениями соответствующими свойствам BitmapData. Проблемы, которые возникнут при десериализации: конструктор BitmapData требует 2 обязательных параметера - чтобы это обойти нужно отнаследоваться от BitmapData и задать значения по умолчанию (они на самом деле не важны, не понятно зачем они там нужны вообще). Далее, вам нужно будет добавить класс наследник в список известных сериализатору: registerClassAlias(getFullyQualifiedClassName(myExtendedBitmapData)). Но тут уже возникает проблема - пиксели не являются свойством BitmapData - есть 2 варианта решения, 1: создать свойство, при изменении которого будут изменятся пиксели, 2. реализовать в классе-наследнике интерфейс IExternalizable и прочитав из массива в который вы как-то записали пиксели, восстановить изначальное состояние BitmapData. Второй вариант, как по мне, предпочтительнее т.как вы сможете не сохранять бесполезные свойства (типа rect и transparent), кроме того, если сильно напрячься, то можно написать сериализатор, который будет использовать какой-нибудь формат сжатия типа JPEG / PNG, и таким образом съэкономить дисковое пространство / траффик необходимый для передачи / хранения данных. |
| Часовой пояс GMT +4, время: 10:26. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.