I made something fairly similar at one point
http://3r1c.net/cacheableImages/

On Thu, Apr 17, 2008 at 7:55 PM, handitan <[EMAIL PROTECTED]> wrote:

>   Hi all,
>
> I am trying to find a simple solution on caching images into the memory.
>
> I had written a code to do that and it seemed to be working but I am
> pretty sure there are things that I had missed.
>
> Any feedback is greatly appreciated.
>
> ========================================================================
>
> I am using associative array to store the Bitmap and using the image URL
> path as the key.
>
> Here's how the code works in general:
>
> - You select which image that you want to load by choosing one of the
> image's name in the comboBox.
>
> - The selected image's name will be appended to a URL where the image is
> located. Let's called this new appended string: "newImgURL"
>
> - Check to see if "newImgURL" is existed in the associative array. If it
> is existed, then load the cached-bitmap else pass "newImgURL"  to
> imageObj.source.
>
> - If it's passed to imageObj.source, the imageObj will throw a "complete"
> event. On the completeEventHandler, cached the imageObj's Bitmap to the
> associative array.
>
> *Here's the code:*
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <mx:Application
> xmlns:mx="http://www.adobe.com/2006/mxml"; layout="horizontal"
> creationComplete="imageInit()">
>
> <mx:Script>
>
> <![CDATA[
>
> *import* flash.utils.getTimer;
>
> *import* mx.collections.ArrayCollection;
>
> *import* mx.controls.ComboBox;
>
> *import* mx.events.ListEvent;
>
>  [
> *Bindable*]
>
> *private* *var* myArray:Array = [*"Select"*,
>
> *"YourImageNameHere1.jpg"*,
>
> *"YourImageNameHere2.jpg"*,
>
> *"YourImageNameHere3.jpg"*];
>
> *private* *const* ResourceURL:String = *"http://PutYourURL/"*;
>
>  [
> *Bindable*]
>
> *private* *var* time2:int = 0;
>
> *private* *var* loadTime2:int = 0;
>
> *private* *var* myDictionary:Array = *new* Array;
>
> [
> *Bindable*]
>
> *private* *var* status:String = *"Not Updated"*;
>
> [
> *Bindable*]
>
> *private* *var* totalMemoryNum:uint = System.totalMemory;
>
> [
> *Bindable*]
>
> *private* *var* byteDiff:uint = 0;
>
> [
> *Bindable*]
>
> *private* *var* myLoaderContext : LoaderContext;
>
> *private* *function* imageInit() : *void*
>
> {
>
> myLoaderContext =
> *new* LoaderContext();
>
> myLoaderContext.checkPolicyFile =
> *true*;
>
> }
>
> *//====================================*
>
> *//Using dictionary*
>
> *//====================================*
>
> *private* *var* exist:Boolean = *true*;
>
> *private* *function* loadImg2(event:ListEvent):*void*
>
> {
>
> *var* myImgName:String = (event.target *as* ComboBox).selectedItem *as*String;
>
> *var* imgPath:String = ResourceURL + myImgName;
>
> *var* myDisplayObj:DisplayObject = myDictionary[imgPath];
>
> status =
> *"Not Updated"*;
>
> time2 = 0;
>
> *if* (myDisplayObj != *null*)
>
> {
>
> *//trace("Cached version");*
>
> *var* myImage:Bitmap = myDisplayObj *as* Bitmap;
>
> FlipSource2.load(
> *new* Bitmap(myImage.bitmapData));
>
> }
>
> *else*
>
> {
>
> exist =
> *false*;
>
> FlipSource2.source = imgPath;
>
> }
>
> byteDiff = System.totalMemory - totalMemoryNum;
>
> totalMemoryNum = System.totalMemory;
>
> loadTime2 = getTimer();
>
> }
>
> *private* *function* takeDiffTime2():*void*
>
> {
>
> *if* (!exist)
>
> {
>
> status =
> *"Updated"*;
>
> *var* myCloneBitmapData:BitmapData = (FlipSource2.content 
> *as*Bitmap).bitmapData.clone();
>
> *var* image:Bitmap = *new* Bitmap(myCloneBitmapData);
>
> myDictionary[FlipSource2.source] = image;
>
> }
>
> time2 = getTimer() - loadTime2;
>
> }
>
> ]]>
>
> </mx:Script>
>
>  <mx:VBox width="100%" height="100%" >
>
> <mx:ComboBox dataProvider="{myArray}" labelField="label"
> change="loadImg2(event)"/>
>
> <mx:Label id="LoadTime2" text="Total Load Time: {time2} ms - {status}"/>
>
> <mx:HBox width="100%" height="100%" horizontalAlign="center">
>
> <mx:Image id="FlipSource2" width="480" height="480" horizontalAlign="
> center" complete="takeDiffTime2();*trace*(*'Image Load2 Complete'*)"
> cachePolicy="off"
>
> cacheAsBitmap="
> false"
>
> loaderContext="
> {myLoaderContext}"/>
>
> </mx:HBox>
>
> </mx:VBox>
>
> <mx:VBox width="100%">
>
> <mx:Label id="TotalMemory" text="Total Memory: {totalMemoryNum/1024} KB"/>
>
> <mx:Label id="DiffMem" text="Byte Diff: {byteDiff/1024} KB"/>
>
> <mx:Label text="Version 1.0" />
>
> </mx:VBox>
>
> </mx:Application>
>
>
>
>
>  
>

Reply via email to