2009-07-22 10 views
2

Je fais un test simple. Je veux écrire BitmapData dans un ByteArray. J'essaye de faire ceci avec writeObject() et readObject(). L'objet lu semble avoir du mal à donner un sens à BitmapData.AS3: ByteArray et BitmapData

var byteArray : ByteArray = new ByteArray(); 
var _cache : BitmapData = new BitmapData(640, 480, true, 0x000000); 
var _blank : BitmapData = new BitmapData(640, 480, true, 0x000000); 

byteArray.writeObject(_blank); 
byteArray.position = 0; 
_cache = byteArray.readObject() as BitmapData; 
trace(_cache); // Traces null 

Quelqu'un peut-il éclaircir ça pour moi? Je n'arrive pas à comprendre ce qui ne va pas avec readObject();

Je sais que je peux faire cela getPixels() et setPixels(), mais je voudrais traiter l'objet comme un objet ici.

Répondre

5

Vous devez utiliser BitmapData::getPixels et BitmapData::setPixels ... écrire des instances de classe sur un ByteArray en tant que tel ne fonctionne jamais complètement comme prévu ... essayez avec Sprites ... :) ... c'est principalement dû au fait que le l'implémentation par défaut n'écrit en quelque sorte que la propriété d'un objet au IDataOutput (ByteArray ou Socket) ... les pixels ne sont pas une propriété du BitmapData en ce sens ... le BitmapData est juste un wrapper ActionScript, qui expose une interface à un flash interne structure de données de joueur ...

vous devriez écrire un adapter pour BitmapData, qui implémente IExternalizable, de sorte que vous avez le contrôle, sur ce qui se passe ... essentiellement, vous aurez seulement besoin de lire/écrire les dimensions, et la charge utile de pixels réelle ... peut-être le drapeau transparent ... souvenez-vous d'utiliser registerClassAlias ...

greetz

back2dos

+0

vraiment intéressant. Réponse géniale, comme d'habitude. Je vous remercie! Je vais expérimenter avec ça. – grey