2010-03-18 6 views
0

J'utiliseEOF erreur lors de la conversion bytearray à bitmapData

var bitmapdata:BitmapData=new BitmapData(); 
var pixels:Bytearray=new Bytearray(); 
pixels = rleDecodePixles(); 
bitmapdata.setPixels(bitmapdata.rect, pixels); 

Dans la 4ème ligne dans le code ci-dessus je reçois « Erreur: Erreur # 2030: Fin du fichier a été rencontré. » J'ai vérifié la longueur de l'objet pixels qui est 4 fois le largeur * hauteur de l'objet rect. Étant donné que setPixels() fonctions se lit unsigned int de bytearray et définit cette valeur aux pixels, je pense que cela devrait fonctionner.

Mais j'ai aucune idée pourquoi cette habitude de travailler. L'objet pixels est rempli après le décodage RLE des données que je reçois d'un serveur.

Y at-il travail autour ou toute autre méthode que je pourrais essayer d'utiliser. La classe loader ne fonctionnera pas car les données que je reçois du serveur ne sont pas dans le format reconnu.

Toute aide est grandement appréciée.

Shrikant

Merci.

+0

Êtes-vous codant pour le canal alpha vraiment côté serveur? –

+0

Je ne suis pas sûr de ça. Pourriez-vous élaborer sur le canal alpha? Les données d'image que je reçois sont pour un curseur de souris. – intoTHEwild

Répondre

13

Vous obtenez l'erreur EOF de ByteArray lorsque vous essayez de déplacer son pointeur au-delà de la dernière position disponible. Lorsque vous remplissez votre ByteArray, vous déplacez réellement son pointeur, donc avant de pouvoir faire quoi que ce soit, vous devez réinitialiser sa position.

Essayez:

var bitmapdata:BitmapData=new BitmapData(); 
var pixels:Bytearray=new Bytearray(); 
pixels = rleDecodePixles(); 
pixels.position = 0; // Reset ByteArray pointer 
bitmapdata.setPixels(bitmapdata.rect, pixels); 
+0

Malheureusement, cela n'a pas fonctionné pour moi. Toujours obtenir "Fin du fichier a été rencontré", et le ByteArray a la bonne longueur de mon fichier image: 58384 octets – OMA

0

Aussi je viens de découvrir que le code suivant fonctionne:

bitmap.object.setPixels(bitmap.object.rect, bitmap.createPixels(width, height)); 

function creatPixels(width:int,height:int):Bytearray 
{ 
    var result:Bytearray=new Bytearray(); 
    result.length=(width*height)<<2; 
    return result; 
} 

Mais après avoir modifié le bytearray et puis essayer de régler les pixels, il jette l'erreur ci-dessus. encore plus confus maintenant.

+0

ressemble à la position de bytearray a été définie à la valeur non nulle et donc octets disponibles étaient moins que nécessaire. fixer la position à zéro l'a résolu. – intoTHEwild

+0

Oups, désolé, j'ai posté une réponse avant que je remarque que vous avez trouvé la solution. –

Questions connexes