2017-02-26 1 views
0

J'ai un UIloader dans mon code AS3 qui affiche des images via un lien web.Enregistrer l'image chargée dans mon UILoader dans AS3 afin de la charger sans connexion Internet

uiloader1.source = "http://www.mywebsite/image1.jpg"; 
uiloader2.source = "http://www.mywebsite/image2.jpg"; 

Une fois que l'utilisateur ont ouvert l'application avec une connexion internet, je le voudrais pouvoir l'ouvrir à nouveau sans connexion Internet, mais ont encore la possibilité d'afficher les images.

Je pensais à quelque chose comme:

var savedImage:SharedObject; 
savedImage= SharedObject.getLocal("ImagesFolder"); 

if (monitor.available || savedImage.data.images == "null") { 

    uiloader1.source = "http://www.mywebsite/image1.jpg"; 
    uiloader2.source = "http://www.mywebsite/image2.jpg"; 

    savedImage.data.loader1 = uiloader1.source; 
    savedImage.data.loader2 = uiloader2.source; 

} 

else { 

    uiloader1.source = savedImage.data.loader1; 
    uiloader2.source = savedImage.data.loader2; 

} 

Mais il ne fonctionne pas comme il enregistre le lien de l'image et non l'image réelle.

Une idée comment puis-je enregistrer les images dans un fichier et dit uiloader1.source et uiloader2.source pour les charger?

EDIT

J'ai essayé que:

uiloader10.source = "http://www.myWebsite/image1.jpg"; 
uiloader10.addEventListener(Event.COMPLETE, completeHandler); 

function completeHandler(event:Event):void { 

    var bitmapData:BitmapData = new BitmapData(uiloader10.width,uiloader10.height); 
    bitmapData.draw(uiloader10); 
    var jpgencoder:JPGEncoder = new JPGEncoder(100); 
    var mybyte:ByteArray = jpgencoder.encode(bitmapData); 
    var myfile:FileReference = new FileReference(); 

    myfile.save(mybyte,"test.jpg"); 

} 

Il semble fonctionner (le tester sur le bureau, pas sur mon appareil téléphonique encore).

1/Mais vous pensez que je ne devrais pas faire cela pour une application AIR? Pourriez-vous me montrer le code que je devrais changer afin de le rendre plus "app compatible" s'il vous plaît?

2/Comment puis-je faire pour charger le fichier dans un UILoader (comment peut récupérer automatiquement le chemin » Exemple: J'ai essayé uiloader11.source = "test.jpg"; mais l'erreur: Unhandled ioError:. text=Error #2035: URL Not Found. URL: app:/test.jpg

+0

1. Si vous publiez pour AIR ** ** - ** aller pour AIR **, il a plus de capacités. Et pour l'amour, un peu d'effort? Google> fichier d'enregistrement aérien> premier lien. 2. Ensuite, l'URL du fichier n'est pas "app: /test.jpg" et je n'ai évidemment aucune idée de l'endroit où vous l'avez sauvegardé. Vous devriez probablement comparer ** FileReference.name ** (après l'enregistrement du fichier) et ** File.applicationDirectory.nativePath **. – Organis

Répondre

0

Bien sûr, il stocke les URL que vous avez demandé, pourquoi devrait-il faire autrement

vous pouvez stocker une liste limitée de types de données dans SharedObject: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html#data

Ainsi, après le chargement de vos images réelles du Web que vous stocker leur contenu en tant que ByteArray qui pourrait être trouvée dans Loader.loaderInfo.bytes: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#loaderInfo http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/LoaderInfo.html#bytes

Si cela ne fonctionne pas vous avoir le plan B pour charger la source d'image avec URLLoader en définissant URLLoader.dataFormat à URLLoaderDataFormat.BINARY. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html#dataFormat

Ensuite, le deuxième début vous pouvez restaurer ces images de SharedObject avec Loader.loadBytes() Méthode: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#loadBytes()

post-scriptum Si votre application fonctionne sous AIR environnement, vous pouvez réellement lire/écrire des fichiers sur le stockage local plutôt que du spam SharedObject avec des données qui ne sont pas censées y aller. Utilisez File.applicationStorageDirectory pour localiser le dossier de stockage d'applications et FileStream, open(), FileStream.readBytes(), FileStream.writeBytes() pour ouvrir, lire, écrire des fichiers respectivement.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html#applicationStorageDirectory http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/FileStream.html