сохранение мувиклипа на диск как SWF в воздухе, а затем повторное чтение - PullRequest
2 голосов
/ 21 августа 2011

Я видел почти все соответствующие темы почти во всем Интернете. и я все еще в замешательстве .. я работаю над приложением для рисования (flex / air),

1- where user loads image file,(bitmapdata > bitmap > movieclip base layer)
2- add layer ( new sprite > movieclip "second object in display list")
3- draw on this sprite ( graphics.draw circle / etc, lot of other details etc)
4- usr can add more layers etc, name layers etc ... all sprites are of same size as bitmap

Q1. Теперь я хотел сохранить этот основной мувиклип (часть UIComponent) в виде файла SWF. так что пользователь может прочитать снова и продолжить работу. почти как я с фотошопом.

комментарий: я знаю, это звучит слишком обобщенно, чтобы спрашивать о таких подробностях. так что будьте терпеливы .. я возился с byteArray. и объект воздушного файла, flash.net.fileReference и т. д. Q2. (основной вопрос), я не хочу конвертировать нарисованные спрайты в растровые данные, а затем делать байтовый массив. (на мой взгляд) он преобразует все в пиксели, которые я не хочу. Q3. Есть ли какая-то автоматическая магическая линия, которая будет делать все ... (сохранять нарисованные векторы / фигуры) в спрайтах как есть? (меньше шансов). если я могу прочитать SWF как movieClip, я могу проверить спрайты для слоев и все остальное ... проблема заключается в записи этого на диск в виде SWF-файла.

Пожалуйста, поделитесь своими мыслями и не стесняйтесь вести, во всех возможных направлениях .. заранее спасибо за ваше драгоценное время ..

Ответы [ 3 ]

1 голос
/ 26 августа 2011

В идеальном мире вы просто пишете YourByteArray.writeObject (YourCanvasSprite);Однако это не работает, поскольку сериализация работает только с данными, которые доступны для чтения и записи (и общедоступны).Таким образом, вы должны сделать возможным воссоздание графики.Возможно, вам удастся упростить это, используя IGraphics (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/IGraphicsData.html), поскольку их можно сериализовать. Поэтому, если вы создадите подкласс Sprite и сохраните «команды рисования» и параметры, а объекту будет предоставлена ​​функция восстановления, ондолжно быть возможно сохранить его в byteArray. Хотя это далеко не однострочный, но, вероятно, немного проще, чем создавать и читать SVG.

0 голосов
/ 05 сентября 2011

Я считаю оба ответа полезными.и со временем я понял, что в обоих случаях это может быть больше работы, чем я могу справиться.Между тем, я тестировал и другие подходы к пиксельным базам.так что я, наконец, принял решение пройти пиксельный путь.Пользователь может сохранять слои в виде png-файлов с прозрачностью.

Если кто-то (другие читатели) придут к этому сообщению, я хочу быстро заключить, что я нашел действительно ценную библиотеку для рисования с именем "graffiti" для as3.это почти 80% вещей, которые я надеялся сделать.поэтому я использую это и настраиваю для своих нужд.Огромное спасибо и уважение всем великим людям, которые ответили из своего драгоценного времени ..

0 голосов
/ 21 августа 2011

Я думаю, что самым чистым решением этой проблемы было бы использование SVG (возможно, EPS).Я незнаком с любой библиотекой, которая будет конвертировать нарисованные векторные объекты в SVG, но поскольку SVG - это просто файл XML, вы можете изучить архитектуру SVG и создать свою собственную: W3C - Scalable Vector Graphics (SVG) 1.1 (второе издание)) .Следующий проект с открытым исходным кодом может помочь вам написать один и может также использоваться для чтения SVG во Flash: Новые компоненты SVGWeb Flex и Flash

менее чистый и, возможно, более сложный способ решенияэта проблема может заключаться в написании ваших собственных SWF-файлов, как вы упоминали.чтобы сделать это, вы должны будете сгенерировать файл .swf во время выполнения, что можно сделать с помощью NativeProcess для передачи аргументов (а именно файла ActionScript, содержащего информацию о вашем чертеже, дочерние слои с именами и т. д.)в MXMLC из Flex SDK.

...