在 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.source
和 uiloader2.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.BINARY。
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()
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
我的 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.source
和 uiloader2.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.BINARY。 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()
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