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

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

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

Регистрация: Apr 2011
Сообщений: 61
По умолчанию BitmapData в AMF

Здравствуйте.

Создаю файл данных через Flash (flex/Air).

Сначала создаю:
Код AS3:
var newData:Dictionary = new Dictionary();
newData["1"].name = "FirstObj";
newData["1"].bitmapData = myBitmapData;
и записываю в файл:

Код AS3:
var stream:FileStream = new FileStream();
stream.open(_newFile, FileMode.UPDATE);
stream.writeObject(newData);
stream.close();
Разные текстовые данные сохраняются нормально..
А битмамДата при открытие этого файла возвращает просто Object, который "невозможно преобразовать в BitmapData".

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Визуальные объекты в AMF не кодируются (судя по спецификации AMF)
__________________
...вселенская грусть

Старый 19.07.2011, 18:10
F10 вне форума Посмотреть профиль Отправить личное сообщение для F10 Найти все сообщения от F10
  № 3  
Ответить с цитированием
F10

Регистрация: Apr 2011
Сообщений: 61
Как в таком случаем можно сохранить визуальный объект в файл...для последующего извлечения?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Если BitmapData - то есть getVector(), который можно записать в исходном виде, либо записать в ByteArray и сжать
__________________
...вселенская грусть

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

Регистрация: Apr 2011
Сообщений: 61
Спасибо. getVector помогло..

Старый 19.07.2011, 20:28
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
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, и таким образом съэкономить дисковое пространство / траффик необходимый для передачи / хранения данных.
__________________
Hell is the possibility of sanity

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

Теги
AMF , bitmapdata , file

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

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


 


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


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