AS3/Air: PNG › Файл › FileStream › ByteArray › BitmapData

Я хочу использовать FileSteam.open() для синхронного чтения файлов изображений с диска. Затем я могу получить их в ByteArray с помощью readBytes(), но я не могу найти, как получить это в BitmapData. Я знаю, что Image может прочитать его как есть, но мне нужен BitmapData.

Какие-либо предложения?


person grey    schedule 26.07.2009    source источник
comment
звучит захватывающе... с нетерпением жду ваших результатов... :)   -  person back2dos    schedule 29.07.2009
comment
очень круто... есть планы по его выпуску? это было бы отличным дополнением как к as3corelib, так и к hxformat ... я думаю, что чересстрочная развертка на самом деле не нужна ... насколько я знаю, загрузка или встраивание чересстрочных PNG тоже не работает, так что - кроме перфекционизма - чего ожидать более?   -  person back2dos    schedule 13.01.2010
comment
Я еще не закончил это ... НО я видел, что во Flash 11 есть новая процедура асинхронной загрузки, которая может сделать этот способ более нишевым, чем он уже был, поскольку он, похоже, обрабатывает bitmapData.   -  person grey    schedule 26.10.2011


Ответы (3)


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

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

ну надеюсь поможет...

приветствие

back2dos

person back2dos    schedule 26.07.2009
comment
Еще раз спасибо. ::sigh:: Итак, я полагаю, у меня нет прямого способа синхронно загрузить BitmapData? - person grey; 27.07.2009
comment
боюсь нет... если найдете, скажите... :) всегда можно надеяться, hxformat (code.google.com/p/hxformat) однажды, наконец, включит декодер PNG, а затем скомпилирует swc, который вы сможете использовать в своем проекте, но до тех пор я даже не знаю библиотеки, выполняющей работу за вас ... или, может быть, однажды появится синхронная версия Loader::loadBytes (что действительно было бы ОЧЕНЬ круто в некоторых сценариях) ... в любом случае удачи ... ;) - person back2dos; 27.07.2009
comment
Я потратил день на декодер PNG. Никогда не делал этого раньше. Я сделал большую часть этого (беспорядочно), но отменить фильтрацию немного сложно. Сейчас у меня есть более важные дела, над которыми нужно поработать, но если у меня будет время закончить их позже, я дам вам знать. - person grey; 29.07.2009
comment
Я продолжаю смотреть на PNGDecoder... и хотя он вроде как работает - он получает все куски, а что нет... мысль о реализации всех различных типов чересстрочной развертки немного выше меня в данный момент. Я использую loadBytes из синхронно загруженных данных PNG. PNG › Файл › FileStream › ByteArray › Loader.loadBytes › BitmapData - person grey; 12.01.2010

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

https://github.com/terrynoya/ASImageLib

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

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

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

person Jeff Ward    schedule 14.02.2014

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

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

Пожелай мне удачи!

person CesareoAguirre    schedule 22.09.2011
comment
Удачи! Дайте нам знать, если вы узнаете что-нибудь полезное. - person grey; 26.10.2011