2009-07-26 13 views
0

Je souhaite utiliser FileSteam.open() pour lire de manière synchrone des fichiers image à partir du disque. Je peux ensuite les mettre dans un ByteArray avec readBytes(), mais je ne peux pas trouver comment l'obtenir dans BitmapData. Je sais que Image peut le lire tel quel, mais j'ai besoin de BitmapData.AS3/Air: PNG> Fichier> FileStream> ByteArray> BitmapData

Des suggestions?

+0

semble sortir ... dans l'attente de vos résultats ... :) – back2dos

+0

très cool ... des plans sur le libérer? Je pense que l'entrelacement n'est pas vraiment nécessaire ... pour autant que je sache, le chargement ou l'intégration de PNG entrelacés ne fonctionne pas non plus, donc - sauf pour le perfectionnisme - pourquoi attendre plus? – back2dos

+0

Je n'ai pas encore fini de le faire ... MAIS j'ai vu qu'il y a une nouvelle routine de chargement asynchrone dans Flash 11 qui pourrait faire plus de niche qu'elle ne l'était déjà puisqu'elle semble gérer bitmapData. – grey

Répondre

5

dans le paquet flash.display, utilisez Loader::loadBytes ... qui vous donnera un Bitmap et le BitmapData peut alors être simplement accessible par Bitmap::bitmapData ... ce qui rend l'ensemble asynchrone de fonctionnement, bien sûr ... la seule chose vous pouvez le faire, est d'écrire un décodeur vous ...

maintenant il y a un encodeur PNG en AS3, dans le as3corelib et je suppose qu'il ya même d'autres, mais probablement la plupart des gens a jugé inutile d'écrire un décodeur, puisque le flash le fait de lui-même, et que l'encodage est plus facile que le décodage, parce que le décodage signifie que vous devez implémenter tout le format ... tout de même, vous pouvez donner un coup de fil e ...

bien

, l'espoir qui aide ...

greetz

back2dos

+0

Merci encore. :: sigh :: Donc, je suppose qu'il n'y a pas de moyen simple pour moi de charger de manière synchrone BitmapData alors? – grey

+0

J'ai peur non ... si vous en trouvez un, s'il vous plaît dites-moi ... :) vous pouvez toujours espérer, hxformat (http://code.google.com/p/hxformat/) sera un jour enfin inclure un décodeur PNG et ensuite compiler un swc que vous pouvez utiliser dans votre projet, mais jusque-là, je ne connais même pas un lib qui fait le travail pour vous ... ou peut-être, un jour, il y aura une version synchrone de ' Loader :: loadByes' (ce qui serait vraiment TRÈS cool dans certains scénarios) ... bonne chance quand même ...;) – back2dos

+0

J'ai passé une journée sur un décodeur PNG. Jamais fait ça avant. Je l'ai fait la plupart du temps (messily), mais défaire le filtrage est un peu délicat. J'ai des choses plus importantes à faire progresser en ce moment, mais si j'ai le temps de le finir plus tard, je vous le ferai savoir. – grey

-1

Il ont le sens, parce que FileStream travaille pour gérer les données pures et BitmapData travaille pour la compilation des données ou décompiler .

La façon dont Im sur le point d'utiliser, est de lire le fichier dans l'origine et écrire un fichier temporaire dans le répertoire de l'application, qui peut être atteint par la classe Loader sans problèmes.

Souhaitez-moi bonne chance!

+0

Bonne chance! Faites-nous savoir si vous trouvez quelque chose d'utile. – grey

0

Cette bibliothèque sur github possède un PNGDecoder qui fonctionne de manière synchrone. Faites un essai:

https://github.com/terrynoya/ASImageLib

Du wiki d'utilisation:

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

Mais j'imagine en utilisant la classe intégrée serait plus rapide, et tout cela dépend de votre cas d'utilisation , généralement lorsque vous manipulez des images semblables à celles de l'interface utilisateur, il est préférable d'utiliser le mode asynchrone pour éviter de bloquer le thread d'interface utilisateur (provoquant le bégaiement de l'application). Mais il pourrait y avoir quelques cas d'utilisation.