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

时间:2017-02-26 03:22:01

标签: actionscript-3 shared-objects

我的AS3代码中有一些UIloader,它通过网络链接显示图像。

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;

}

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

知道如何将图片保存到文件中并告诉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");

}

它似乎有效(在桌面上测试,而不是在我的手机设备上测试)。

1 /但您认为我不应该为AIR应用程序执行此操作吗? 你能告诉我我应该改变的代码,以使它更符合“app兼容”吗?

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

1 个答案:

答案 0 :(得分:0)

当然它按照你的指示存储了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

如果这不起作用,您可以通过将 URLLoader.dataFormat 设置为 URLLoaderDataFormat.BINARY ,让B计划使用 URLLoader 加载图像源。 http://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()

PS 如果您的应用在 AIR 环境下运行,您实际上可以将文件读/写到本地存储而不是垃圾邮件 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