2010년 4월 17일 토요일

BitmapData클래스

 

- BitmapData는 Object클래스에서 상속받는다. 이 BitmapData클래스는 bitmapData속성을 사용하여 Display

  패키지(DisplayObject) 안에 정의 되어 있는 Bitmap객체를 픽셀 데이터로 처리 할 수 있다. 또 Loader를 통

  해 로드한 비트맵 이미지에서도 액세스가 가능하다.

  Bitmap클래스는 구조가 InteractiveObject와 Shape와 같은 레벨에 있기 때문에 InteractiveObject에서

  정의되어 있는 마우스 이벤트 전달을 할 수 없다. 그러나 Bitmap를 포함하는 DisplayObjectContainer의

  addEventListener()로는 가능하다.

 

*BitmapData는 비트맵 이미지를 로드할 때 픽셀 제한이 있으므로 미리 크기를 고려하여 로드한다.

     Flash Player 10에서는 BitmapData 객체의 최대 높이 또는 폭의 크기가 8,192픽셀이며 총 픽셀 수는

     16,777,216픽셀을 초과할 수 없다. 따라서 객체의 폭이 8,192이고 높이가 2,048픽셀 이하인 이미지를 로드

     해야한다. Flash Player 9 이전 버전은 제한 픽셀이 2,880 * 2,880픽셀이다.

 

- BitmapData에서 이미지를 로드하는 과정을 보면 이렇다.

   플레시에서 이미지를 Load하는 순간 flash에서 비트맵 데이터로 분석하고 DisplayObect가 화면에 표시를

   해준다. 화면에 표시를 해준걸 Edit possible을 해줘. 편집이 가능 하도록 변경해준다.

   여기서 편집가능하다는 말이 비트맵 데이터로 분석한 과정에서 그 이미지를 Capture해서 우리가 포토샵

   같은 곳에서 핸들링 할수 있도록 해주는 기능과 같다는 것이다.

 

   예를 들어, 사진의 실제 크기가 2000 * 3000이라 치면 Load클래스에서 정의된 loader라는 객체는 실제로

   가벼운데 이 큰 사진을불러 오는 순간 무거워지게 된다. 그래서 불러오기 전에 크기를 stage의 크기로 줄

   여서 캡쳐를 뜨고 그 다음에 축소된 사진을 불러오는 것이다. 그럼 원래 크기인 2000 * 3000인 stage를 넘

   어서는 커다란 사진이 불러와서는 딱 stage크기만해지니 훨씬 가벼워질 수 있는 것이다.

 

   그러데 여기서 이렇게 크기를 scaelX속성을 사용하여 축소시키면 addChild()가 되지 않는다. 따라서 이럴

   떄에는 Graphics를 사용하여 그리면 되는데 Graphics에는 beginFill을 bitmap으로 대신 넣어서 그려넣는

   beginBitmapFill()메소드를 사용하면 된다.

 

   여기서 이미지를 불러오는 과정에 BitmapData에서 draw()라는 메소드가 있는데 여기에 파라미터값으로

   넘기는 값중에 soure라는 파라미터가 있다.

  

  

   그 값은 IBitmapDrawable이라는 인터페이스에서 구현되어져 있는데 이 인터페이스는 이미 DisplayObject

   에서 정의 되어져 있어서 그릴 수 있다. 눈에 보이는 모든 것들은 Sprite를 통해 DisplayObject를 상속 받아

   져 있기 때문에 source 매개변수에 loader를 써도 된다는 것이다.

 

* 여기서 인터페이스는 회사의 계약서라고 생각하면 된다. 명시만 해주는 것으로 아래와 같이 써준다.
[code as3]
public class Main extends Sprite implements IMain
[/code]

또 실제 인터페이스 인 IMain.as속 소스는..

[code as3]
public function a() : void{}

[/code]

이런식으로 메소드만 정의된 형태로 들어가있다.
여기서 접근자는 무조건 public이어야 한다.

아무내용이 없더라고 IMain에서 명시되어져 있는 함수를 무조건 Main에서 사용해야 한다. 형태 그대로..

파마미터가 있으면 있는대로...!!

 

인터페이스는 프로그래밍하는 개발자에게 길잡이 역할을 하는 것이나 다름 없다. 아직 완전히 와닿지는

않으나 여기까지만 알아두면 좋겠다.

 

 

0 개의 댓글:

댓글 쓰기