2009-12-18 7 views
1

Je dois pouvoir charger une image jpeg/png à partir du disque et l'afficher en flex et l'envoyer à un serveur en tant que chaîne encodée en base64. Mais une fois le fichier image chargé, dans mon objet flash.display.LoaderInfo, la propriété bytes (type de ByteArray) contient plus d'octets que le contenu du fichier.Flash Loader et ByteArray

Exemple: Taille du fichier image: 3089 flash.display.LoaderInfo.bytesTotal: 3089 flash.display.LoaderInfo.bytes.length: 3155

Comme je l'ai besoin de coder la flash.display.LoaderInfo.bytes dans la chaîne base64, i Je ne sais pas quelle partie de l'objet ByteArray je dois envoyer au serveur. Je ne veux pas dessiner le contenu bytearray dans une image Bitmap et le ré-encoder comme jpg car je dois conserver la qualité d'origine du fichier.

Merci

du code:

private function onDataLoadComplete(event:Event):void { 
       var encoder:Base64Encoder = new Base64Encoder(); 
       //var imagePartBytes:ByteArray = new ByteArray(); 
       //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytesTotal); 
       //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytes.length); 
       //imagePartBytes.writeBytes(event.target.bytes, event.target.bytes.length-event.target.bytesTotal, event.target.bytesTotal); 
       encoder.encodeBytes(event.target.bytes); 
       var imagePart:String = encoder.flush(); 
       trace(imagePart); 
       data = fileName+";"+event.target.contentType+";"+imagePart; 
       _changed = true; 
      } 

Répondre

0

Normalement, vous devez envoyer tout le contenu du bytearray. Comment chargez-vous l'image, êtes-vous sûr de recevoir des données sous forme binaire? Si vous affichez l'image chargée, y a-t-il un problème?

Si vous codez des données avec base64, la longueur de données résultante sera supérieure à l'original puisque vous réencodez 8 bits de données longues avec 6 bits. Donc, pour un octet, il tiendra dans 2 octets.

1

Patrick merci pour votre réponse. J'ai trouvé une solution. J'utilisais un FileReference pour charger une image directement dans Flash Player et ensuite utiliser un Loader pour charger l'image sur scène. J'ai essayé de coder la istead ByteArray du chargeur du FileReference.data qui est un ByteArray, celui que je besoin :)

var encoder:Base64Encoder = new Base64Encoder(); 
encoder.encodeBytes(fileRef.data); 
imagePart = encoder.flush(); 

et cela fonctionne.

+0

Ok, je vous en prie. Bon vous trouvez votre problème. – Patrick