2009-07-26 2 views
0

Я хочу использовать FileSteam.open() для синхронного чтения файлов с диска. Затем я могу получить их в ByteArray с readBytes(), но я не могу найти, как получить это в BitmapData. Я знаю, что изображение может читать его как есть, но мне нужно BitmapData.AS3/Air: PNG> Файл> FileStream> ByteArray> BitmapData

Любые предложения?

+0

звуки, выходящие ... с нетерпением жду ваших результатов ... :) – back2dos

+0

очень круто ... любые планы по его выпуску? это было бы большим подспорьем как для asccorelib, так и для hxformat ... Я думаю, что переплетение на самом деле не нужно ... насколько я знаю, загрузка и вложение чересстрочных PNG тоже не работает, поэтому - кроме перфекционизма - зачем ожидать больше? – back2dos

+0

Я еще не закончил это делать ... НО Я видел, что в Flash 11 есть новая процедура загрузки async, которая может сделать этот путь более нишевым, чем это уже было, поскольку он, похоже, обрабатывает bitmapData. – grey

ответ

5

в пакете flash.display, используйте Loader::loadBytes ... это даст вам Bitmap и BitmapData затем можно просто получить доступ через Bitmap::bitmapData ... это делает всю операцию асинхронно, конечно ... единственное, вы могли бы сделать, это написать декодер себя ...

теперь есть PNG кодер в AS3, в as3corelib и я предполагаю, что есть даже другие, но, вероятно, большинство людей сочли бессмысленным писать декодер, поскольку флэш делает это самостоятельно, а также кодирование проще, чем декодирование, потому что декодирование означает, что вы должны реализовать весь формат ... тем не менее, вы можете дать ему кусок курса е ...

хорошо, надеюсь, что помогает ...

Greetz

back2dos

+0

Еще раз спасибо. :: sigh :: Итак, я думаю, что нет прямого пути для синхронной загрузки BitmapData? – grey

+0

Я боюсь, что нет ... если вы найдете его, скажите, пожалуйста ... :) вы всегда можете надеяться, hxformat (http://code.google.com/p/hxformat/) когда-нибудь, наконец, включит PNG-декодер, а затем скомпилировать swc, который вы можете использовать в своем проекте, но до тех пор я даже не знаю, как lib выполняет эту работу для вас ... или, может быть, в один прекрасный день появится синхронная версия ' Loader :: loadBytes' (в некоторых случаях это было бы очень круто) ... удачи в любом случае ...;) – back2dos

+0

Я провел день на PNG-декодере. Никогда не делал этого раньше. Я получил большую часть этого (грязно), но отмена фильтрации немного сложнее. У меня есть более важные вещи, чтобы добиться прогресса на данный момент, но если я получу время, чтобы закончить это позже, я дам вам знать. – grey

-1

Это имеет смысл, потому что FileStream работает для управления чистых данных, и BitmapData работает для компиляции или декомпилировать данных ,

Способ использования Im состоит в том, чтобы прочитать файл в начале координат и записать временный файл в каталог приложения, который может быть достигнут классом Loader без проблем.

Желаю мне удачи!

+0

Удачи! Сообщите нам, если вы узнаете что-нибудь полезное. – grey

0

Эта библиотека на github имеет PNGDecoder, который работает синхронно. Дайте ему попробовать:

https://github.com/terrynoya/ASImageLib

Из вики использования:

var bytes:ByteArray = [PNG bytes]; 
var bmpData:BitmapData = new PNGDecoder().decode(bytes); 
this.addChild(new Bitmap(bmpData)); 

Но я бы себе представить, используя встроенный в классе будет быстрее, и, хотя это зависит от сценария использования , как правило, при работе с изображениями, подобными UI, асинхронный предпочтительнее избегать блокировки потока пользовательского интерфейса (заставляя приложение заикаться). Но могут быть некоторые варианты использования.

Смежные вопросы