Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   выделить Bitmap из ByteArray (http://www.flasher.ru/forum/showthread.php?t=117319)

manah 24.10.2008 11:43

выделить Bitmap из ByteArray
 
Здравствуйте!
Есть сервер который передает флешу данные в таком виде:
Код:

<xml>
  <field name="id">9825</field>
  <field name="img">*picture*(картинка)*picture*</field>
</xml>*end*

Данные передаются через сокет. После приёма, всю информацию я храню в ByteArray. Теперь мне надо выделить то что между "*picture*" в другой ByteArray.
Пробовал:
1. первести ByteArray в String
2. Из String выделить нужную часть
3. преопрозовать обратно в ByteArray
Но
Код:

a:ByteArray; //переданная информация
b:ByteArray;
s:String;
a.position = 0;
s = a.toString();
b.writeObject(s);
b.position = 0;
// но b.bytesAvailable != a.bytesAvailable

Помогите пожалуйста решить проблему...
Либо каким образом можно передать картинку через xml, и нормально принять его?

BlooDHounD 24.10.2008 11:57

2manah, обычное развитие ситуации:
1. сперва значит, через бинарный сокет, фигачим текстовые данные.
2. потому, что текстовые данные легко парсить!!! XML - сила!
3. потом хотим засунуть в текстовый протокол бинарные данные.
4. узнаём, что оказывается фигня получается.

нельзя передать бинарные данные внутри текста. так как нулевой байт у текстовых данных обозначает конец строки.

варианты дальнейшего развития.
1. написать нормальный бинарный протокол.
2. посылать картинку отдельно: например следующей командой (предыдущей, или любой другой, в начале это, и зарание знать длинну).
3. вариант сканировать ByteArray, и поочереди проверять последовательности байт на совпадение с *picture*. запомнить позицию. повторить сканирование. считать байтэррэй что в промежутке получился. теперь что бы остальные данные были текстом, надо сдвинуть конец байтэррэя, а считаное зарание расстояние.
4. забыл совсем. можно перевести байтики картинки в текст.

manah 24.10.2008 17:48

ну вот у меня как раз проблема с
Цитата:

вариант сканировать ByteArray, и поочереди проверять последовательности байт на совпадение с *picture*. запомнить позицию. повторить сканирование. считать байтэррэй что в промежутке получился. теперь что бы остальные данные были текстом, надо сдвинуть конец байтэррэя, а считаное зарание расстояние.

BlooDHounD 24.10.2008 20:51

алгоритм я написать. писать код за вас я не буду. тем болие такое мракобесие. в кошмаре не придумаю болие тупого способа передачи бинарных данных.

mort 25.10.2008 18:44

Через xml передавать бинарную информацию нинада, лучше передавайте ссылку на бинарный файл.
Тем более, что картинка.
Ежели картинка генерится чисто для этого вызова, так и создавайте её во временном хранилище. Заодно кеш будет.

wvxvw 25.10.2008 19:20

Вот писал кому-то пример, как можно найти картинку заембедденую в МП3 файл, должно помочь... ну а мракобесие... ну, вобщем-то да =)
http://www.actionscript.org/forums/s...=185752&page=5

BlooDHounD 25.10.2008 21:43

wvxvw, не должно быть проблемы сделать readBytes из бинарного файла вроде mp3 :) основная проблема найти нужный кусок :) так вот одно дело найти его среди нармально структурированного бинарника, а другое дело сканировать бинарник на потенциальные куски, потом ещё вырезать эти куски, собирать их них другой бинарник, и конвертировать его в текст :) вот это просто ужасная работа :)

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

wvxvw 26.10.2008 02:14

То, что написано у меня делает примерно следующее: считывает байт-аррей в строку, и ищет в ней совпадения с регекспом. Т.е. например, вот хочешь ты найти, а сколько раз у меня встречается последовательность "\x41\x50\x49\x43" в твоем байтаррее. Ты, конечно, можешь написать функцию, которая будет искать именно эту последовательность, и, естесственно, можешь сделать ее более универсальной, чтобы, например, она могла принимать любую строку в качестве ключа, но если тебе хочется например найти "\x41\x50\x49[\x43|\x42]" то писать самому RegExp как-то влом да и непродуктивно в любом случае =)
Ну и, я ж в начале сказал, что пример существует только в качестве примера, но практического применения у него как бы нет, это просто для того, чтобы показать как можно реализовать поиск по байт-аррею.

Да, кстати по поводу того самого тага, который нужно было найти: представь, что формат позволяет а. неограниченое количество вхождений, б. не регламентирует длину и место в файле, вообще спецификация формата не требует поддержки этого тага, и понимается он только медиа плеером и И-Тунс...

BlooDHounD 26.10.2008 12:29

wvxvw, о госпади! спасибо, что я не стал разбираться в том, что ты написал! только, ты мог придумать такую шизофреническую идею. ну вот скажи, кому какое дело сколько раз в каком бинарнике что встретилось? да и про скорость работы, никому не рассказывай.

все mp3тэги, имеют вполне себе нормальный внешний формат. сканировать именно именно их, никакого труда не составляет. так как в заголовках есть вся информация о тэгах. от место не зависит. кстати ... swf построен по такому же принципу. ид, длина, тэг, ид, длина, тэг, ид, длина, тэг ... что бы найти нужный тэг, достаточно бегать по ИД, а остальную инфу пропускать исходя из длинны.

wvxvw 26.10.2008 14:13

Чет ты какой-то не добрый в последнее время =)
Ну вот представь на секунду, а вдруг я знаю, о чем говорю? И этот конкретный таг именно может встречаться неограниченное количество раз и не обязан пониматься парсером вообще. Может я до того как это писать посмотрел документацию и не с потолка это взял? И вообще, все, что о нем извесно, так это то, что он должен начинаться с определенного заголовка, а дальше есть варианты: если это JPEG, GIF, PNG или BMP - то это никак не отражается на структуре MP3 файла, он просто включается в него как есть без всяких дополнительных разъяснений. Т.е. для того, чтобы узнать что за картинка включена нужно, как минимум прочитать ее хидер. Т.е. твои варианты действий: ты можешь полностью проигнорировать этот таг, либо написать свитч, который будет в зависимости от формата картинки ее либо парсить, либо пропускать. Мало того, когда, например, медиаплеер сохраняет такой МП3, то он может добавить разное количество пустых байтов либо перед включением картинки, либо после...
Да, вобщем, чего я распыляюсь :) Тебе не нужно - я ж тебя не заставляю пользоваться, я нигде не заявлял, что это супер быстрый вариант (более того, в той же теме раньше я привел результаты тестов скорости работы именно для того, чтобы объяснить, что это не будет работать быстро), и не один раз однозначо написал, что это только пример, который помогает понять, как это может работать.


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

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