Copy link to clipboard
Copied
I have images from a local folder that I would like to load into my flash presentation as an array.
I'm trying to do an Actionscript code. Is there anyway to do that?
Alright.
Please try this:
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.filesystem.File;
import flash.net.URLRequest;
var source:String = "./images"; // the source directory must be included in the AIR settings
var extensions:Vector.<String> = new <String>[ "bmp", "jpeg", "jpg", "png" ];
var parsedSource:String;
var foundImages:Array;
var
...
Copy link to clipboard
Copied
yes. what problem are you having?
Copy link to clipboard
Copied
I would like to know how to load local file images into an array and put it in the UILoader.
I tried to do the File function, but I think I'm doing something wrong.
Is there any way I can code it using Actionscript?
Copy link to clipboard
Copied
what are the file names?
Copy link to clipboard
Copied
"Alaska.png" "Australia.png"
Copy link to clipboard
Copied
then you would need to add those names to an array, start loading the first, listen for loading to complete, advance to the next etc
Copy link to clipboard
Copied
Ok. How can I code it?
Copy link to clipboard
Copied
do you know how to load one file and listen for completion of loading?
Copy link to clipboard
Copied
no i do not.
I know how to load a file, but not how to listen for completion of loading
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Ok that should work. Can I use URLRequest for the file location?
If so, how to load the contents?
Copy link to clipboard
Copied
what do you mean by "can i use urlrequest for the file location"?
Copy link to clipboard
Copied
Oh, I meant URLLoader. Sorry for the confusion.
Copy link to clipboard
Copied
Hi.
Do you want to:
- Load all the files of any folder without knowing what's inside;
- Use a data file (.json, .xml...) that has the list of files you want to load;
- Simple declare an array/vector in AS3 code listing the files?
Regards,
JC
Copy link to clipboard
Copied
I would like to load all the files of any folder and declare an array in AS3 code listing the files.
Copy link to clipboard
Copied
no, you would need to supply the file names unless there's some logic that could be used to generate those names.
Copy link to clipboard
Copied
Ok. I'll give it a try.
Copy link to clipboard
Copied
how many files are there?
Copy link to clipboard
Copied
Alright.
Please try this:
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.filesystem.File;
import flash.net.URLRequest;
var source:String = "./images"; // the source directory must be included in the AIR settings
var extensions:Vector.<String> = new <String>[ "bmp", "jpeg", "jpg", "png" ];
var parsedSource:String;
var foundImages:Array;
var loadedImages:Vector.<Bitmap>;
function main():void
{
parsedSource = parsePath(source);
foundImages = listDir(parsedSource).filter(function(element:*, index:int, arr:Array):Boolean
{
return extensions.indexOf(element.extension) > -1;
});
if (foundImages.length > 0)
{
loadedImages = new Vector.<Bitmap>();
loadImages(foundImages);
}
}
function parsePath(path:String):String
{
const SEP:String = File.separator;
var forwardReg:RegExp = /\//g;
var backwardReg:RegExp = /\\/g;
var path:String;
path = path
.replace(forwardReg, SEP)
.replace(backwardReg, SEP);
return path;
}
function loadImages(images:Array):void
{
var i:uint;
var total:uint = images.length;
for (i = 0; i < total; i++)
loadImage(images[i]);
}
function listDir(dir:String):Array
{
var desktop:File = File.applicationDirectory.resolvePath(dir);
return desktop.getDirectoryListing();
}
function loadImage(file:File):void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
loader.load(new URLRequest(file.url));
}
function completeHandler(e:Event):void
{
e.currentTarget.removeEventListener(e.type, arguments.callee);
loadedImages.push(Bitmap((e.currentTarget as LoaderInfo).content));
if (loadedImages.length == foundImages.length)
displayImageGrid(loadedImages);
}
function ioErrorHandler(e:IOErrorEvent):void
{
trace(e);
e.currentTarget.removeEventListener(e.type, arguments.callee);
}
function securityErrorHandler(e:SecurityError):void
{
trace(e);
}
function displayImageGrid(images:Vector.<Bitmap>):void
{
var i:uint;
var total:uint = images.length;
var image:Bitmap;
var baseWidth:uint = 256;
var baseHeight:uint = 384;
var gapX:int = 10;
var gapY:int = 10;
var columns:uint = uint(stage.stageWidth / (baseWidth + gapX));
for (i = 0; i < total; i++)
{
image = images[i];
image.width = baseWidth;
image.scaleY = image.scaleX;
image.x = gapX + (i % columns) * (baseWidth + gapX);
image.y = gapY + int(i / columns) * (baseHeight + gapY);
image.smoothing = true;
addChild(image);
}
}
main();
And please notice that the source directory must be included in the AIR settings.
I hope this helps.
Regards,
JC
Copy link to clipboard
Copied
how do you know this is an air app?
Copy link to clipboard
Copied
@kglad: The OP said it's a Flash presentation. So why not?
Also, using AIR is the only way to list a folder's content.
Copy link to clipboard
Copied
I keep getting this error. "1046: Type was not found or was not a compile-time constant: File."
But, it overall works.
Copy link to clipboard
Copied
Copy link to clipboard
Copied
what line of code is triggering that error?
Copy link to clipboard
Copied