BLOG main image
Category (342)
MySpace (89)
Astronomy (50)
Development (178)
Drum (25)
linux에서 subversion설정
누리에 없을 자그마한 자국
살라딘의 생각
saladin's me2DAY
3D Avata - BuddyPoke
기찬 개발이야기
[FLEX] ANT로 ASDOC 사용하기
THLIFE.net
Flash10 대응 Textcube 1.7.5.1..
텍스트큐브 공지사항
«   2008년 11월   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
325629 Visitors up to today!
Today 129 hit, Yesterday 963 hit
/Development/Flex/AIR 관련글 보기 2008년 05월 10일 11시 51분

Flex에서 Image 클래스를 이용해서 로드하는 컨텐츠중 png, jpg 등의 이미지를 회전, 확대를 하게 되면 이미지가 약간씩 깨진다.

이때 깨지는 것을 방지하기 위해 Bitmap클래스의 smoothing 속성을 true로 설정하면되는데...
Image클래스에 로드되는 컨텐츠는 DisplayObject이므로 바로 smoothing을 적용할 수 없다.
매번 smoothing속성을 적용하는 것도 귀찮으므로
Image클래스를 확장하여 SmoothImage 클래스를 만들어 보았다.

/**

 * SmoothImage 클래스

 * 제작 : 지돌스타(http://blog.jidolstar.com, jidolstar@gmail.com)

 * 환경 : Flex 3

 *

 * Image 로드하는 컨텐츠에 smoothing 자동적용시켜 회전, 확대시 이미지가 깨지는 것을 방지해준다.

 */

package com.starpl.components

{

       import flash.display.Bitmap;

       import flash.display.DisplayObject;

       import flash.events.Event;

       import flash.events.IOErrorEvent;

       import flash.events.SecurityErrorEvent;

      

       import mx.controls.Image;

 

       public class SmoothImage extends Image

       {

             public function SmoothImage()

             {

                    super();

             }

            

             override public function load(url:Object=null):void

             {

                    super.load(url);

                    addEventHandlers();

             }

            

             private function completeEventHandler(event:Event):void

             {

                    var content:DisplayObject = this.content as DisplayObject;

                    var bitmap:Bitmap;

                    if(content)

                    {

                           bitmap = content as Bitmap;

                           if( bitmap )

                                 bitmap.smoothing=true;

                    }

                    removeEventHandlers();

             }

            

             override public function set source(value:Object):void

             {

                    var bitmap:Bitmap = value as Bitmap;

                    if( bitmap )

                    {

                           bitmap.smoothing = true;  

                    }

                    super.source = value;

             }

            

             private function ioEventHandler(event:IOErrorEvent):void

             {

                    removeEventHandlers();

             }

            

             private function securityErrorEventHandler(event:SecurityErrorEvent):void

             {

                    removeEventHandlers();

             }

            

             private function addEventHandlers():void

             {

                    this.addEventListener(Event.COMPLETE, completeEventHandler);

                    this.addEventListener(IOErrorEvent.IO_ERROR, ioEventHandler);

                    this.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorEventHandler);

             }

            

             private function removeEventHandlers():void

             {

                    this.removeEventListener(Event.COMPLETE, completeEventHandler);

                    this.removeEventListener(IOErrorEvent.IO_ERROR, ioEventHandler);

                    this.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorEventHandler);

             }

       }

}




사용방법은 Image처럼 사용하면 되겠다.

 <local:SmoothImage id="image" source="이미지경로" rotation="회전각도" scaleX="x축스케일" scaleY="y 스케일"/>


아래와 같은 이미지를 보통 Image클래스를 사용할 때와 SmoothImage 클래스를 사용할 때를 비교해 보겠다.


사용자 삽입 이미지

사용자 삽입 이미지

Image를 사용했을 때

사용자 삽입 이미지

SmoothImage를 사용했을 때



어려운 팁은 아닌데 의외로 알면 유용하다는 거~~ ^^

글쓴이 : 지돌스타(http://blog.jidolstar.com/329)

이 글의 관련글
Trackback Address :: http://blog.jidolstar.com/trackback/329
BlogIcon 검쉰 | 2008년 05월 11일 05시 25분 | PERMALINK | EDIT/DEL | REPLY
Cooooooooooooooooooooooooooooooooooooooooooooool!!!
시드 | 2008년 05월 13일 09시 03분 | PERMALINK | EDIT/DEL | REPLY
멋찌십니다~~ ^^
찌노 | 2008년 05월 13일 10시 17분 | PERMALINK | EDIT/DEL | REPLY
크~ 아주 유용한 정보네요~
BlogIcon 블루메탈 | 2008년 05월 28일 14시 05분 | PERMALINK | EDIT/DEL | REPLY
지돌님 항상 들러서 좋은 팁 많이 보고 갑니다^^.
스무쓰이미지도 제가 살짝 업어가서 사용중인데요
동적로딩한 경우에는 적용되지만 @Embed한 경우에는 COMPLETE이벤트가 호출되지 않기 때문에 따로 smooth를 켜줘야 하는거같네요
웹방 | 2008년 09월 30일 14시 25분 | PERMALINK | EDIT/DEL | REPLY
Image 클래스로 불러온 파일(JPG, GIF, PNG, SWF)의 원본 사이즈는 어떻게 구할 수 있나요?
Image.loaderInfo.loader를 이용해서 Image.loaderInfo.loader.contentLoaderInfo.width로 하니깐

Image.loaderInfo.loader가 null이네요.
혹시 다른 방법이나 꽁수가 있을 런지요?
BlogIcon 지돌스타 | 2008년 10월 01일 00시 28분 | PERMALINK | EDIT/DEL
컨텐츠의 폭과 높이는 컨텐츠가 모두 로드가 완료되었을때 알 수 있습니다. loadComplete 이후에 접근해보세요.
웹방 | 2008년 10월 01일 13시 18분 | PERMALINK | EDIT/DEL | REPLY
public class ItemImage extends Image
{
public function ItemImage():void{
super();
this.width = 118; this.height = 101;
this.scaleContent = true;
this.maintainAspectRatio = false;
//handler
this.addEventListener(MouseEvent.MOUSE_DOWN, downHandler, false, 1, true);
this.addEventListener(MouseEvent.MOUSE_UP, upHandler, false, 1, true);
this.addEventListener(Event.COMPLETE, onComplete);
}
private function downHandler(e:MouseEvent):void{
...
...
e.stopImmediatePropagation();
}
private function upHandler(e:MouseEvent):void{
...
...
e.stopImmediatePropagation();
}
private function onComplete(e:Event):void{
Application.application.myDebug.text += "Image onComplete:"+this.loaderInfo.loader;
}
}

위가 클래스에서
var a:ItemImage = new ItemImage();
Canvas.addChild(a);
a.source = "./image.jpg";
하면 해서 myDebug에 찍어 보면 Image onComplete:null 이라고 뜹니다...^^;;
BlogIcon 지돌스타 | 2008년 10월 01일 14시 10분 | PERMALINK | EDIT/DEL
this.loaderInfo.width는요?
웹방 | 2008년 10월 01일 18시 15분 | PERMALINK | EDIT/DEL | REPLY
this.content.width로 해결되었네요...

this.scaleContent = true;
this.maintainAspectRatio = false;
사이징을 하면 content사이즈도 따라서 사이징 되는 줄 알았는데,
아닌가 봐요..^^;;
BlogIcon 지돌스타 | 2008년 10월 01일 21시 41분 | PERMALINK | EDIT/DEL
아~ 맞다~ ㅋㅋㅋ
content 속성으로 접근하면 됩니다.
content 자체가 displayObject거든요.
위의 코드에 나와 있는데 ^^
웹방 | 2008년 10월 01일 18시 17분 | PERMALINK | EDIT/DEL | REPLY
감사합니다...
블로그 아주 잘 보고 있습니다...^^
BlogIcon 지돌스타 | 2008년 10월 24일 12시 33분 | PERMALINK |