在 AS3 中保存加载到我的 UILoader 的图像,以便在没有互联网连接的情况下加载它

Save image loaded to my UILoader in AS3 in order to load it without internet connection

我的 AS3 代码中有一些 UIloader,可以通过网络显示图像 link。

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

一旦用户通过互联网连接打开应用程序,我希望他能够在没有任何互联网连接的情况下再次打开它,但仍然可以显示图像。

我想到了这样的事情:

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;

}

但它不起作用,因为它保存了图像的 link 而不是实际图像。

知道如何将图像保存到文件中并告诉 uiloader1.sourceuiloader2.source 加载它们吗?

编辑

所以我试过了:

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");

}

它似乎可以工作(在桌面上测试它,而不是在我的 phone 设备上)。

1/但您认为我不应该为 AIR 应用程序那样做? 你能告诉我我应该更改的代码以使其更 "app compatible" 吗?

2/如何在Uiloader中加载文件(如何自动检索路径? 示例:我试过 uiloader11.source = "test.jpg"; 但错误:Unhandled ioError:. text=Error #2035: URL Not Found. URL: app:/test.jpg

它当然会按照您的指示存储 URL,为什么要这样做呢?

您可以在 SharedObject 中存储有限的数据类型列表: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html#data

因此,从网络加载实际图像后,您要将其内容存储为 ByteArray,可以在 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

如果这不起作用,您有计划 B 通过设置 URLLoader.dataFormat[=46 使用 URLLoader 加载图像源=] 到 URLLoaderDataFormat.BINARYhttp://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html#dataFormat

然后在第二次启动时,您可以使用 Loader.loadBytes() 方法从 SharedObject 恢复这些图像: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#loadBytes()

P.S. 如果您的应用程序在 AIR 环境下运行,您实际上可以 read/write 文件到本地存储而不是垃圾邮件SharedObject,其中包含不应该去那里的数据。使用 File.applicationStorageDirectory 定位应用程序存储文件夹和 FileStream,open(), FileStream.readBytes( ), FileStream.writeBytes()分别打开、读取、写入文件。

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