티스토리 툴바


보통 이미지를 그냥 로드만 해서 사용했을 경우 플래시상에서의 부담이 엄청나게 된다.
이 문제를 해결하기 위해서는 이미지를 껍질만 로드하고 나머지 알갱이는 버리는 형식으로 사용하면 된다.

아래의 코드를 보면 그리 어렵지 않게 알맹이만 빼낼 수 있다~

package
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;

	public class ImgLoader extends Sprite
	{
		private var _loader:Loader;
		public function ImgLoader() 
		{
			//일반적인 Loader 코드
			_loader = new Loader();
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
			_loader.load(new URLRequest("image/test.jpg"), new LoaderContext(true));
		}
                                
                                //로드된 이미지의 껍질만 복사한다.
		private function duplicateImage(original:Bitmap):Bitmap {
			//로드된 이미지의 껍질을 복사하여 Bitmap에 넣는다.
			var image:Bitmap = new Bitmap(original.bitmapData.clone());
			//복사된 이미지의 질감을 부드럽게 바꿔준다.
			image.smoothing = true;
			return image;
		}

		private function onComplete(e:Event):void {
			//duplicateImage함수를 이용해 복사된 이미지를 image라는 bitmap에 넣어준다.
			var image:Bitmap = duplicateImage(Bitmap(_loader.content));
                                                //image라는 비트맵을 출력한다. loader를 바로 addChild 시켰을때와 동일한 모습을 보여준다.
			addChild(image);
					
			//껍질을 복사했기 때문에 필요없는 loader를 제거한다.
			var loaderDispose:LoaderInfo = _loader.contentLoaderInfo;
			//loader에 로드된 것이 액세스가 허용되어있는지 이미지가 맞는지를 확인한후
			//처분한다(dispose)
			if ( loaderDispose.childAllowsParent && loaderDispose.content is Bitmap) {
				(loaderDispose.content as Bitmap).bitmapData.dispose();
			}
			
			//확실한 처리를 위해 실행한다.		
			_loader.unload();
			_loader = null;
		}

		private function onError(e:Event):void {
			_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
			_loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError);
		}
	}
	
}

위처럼 이미지를 로드하면 더욱 가벼운 플래시환경을 만들수있다.
저작자 표시 비영리
Posted by oohoot

댓글을 달아 주세요