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> > > > > > >

