키스맥 - 리얼베이직 매킨토시 전문 웹 매거진 웹진

  + 파일메이커 기초편
  + 4th Dimension
  + 리얼베이직
  + OS X 10.3
  + 홈페이지 만들기
  + 포토샵 강좌
  + 디카 완전정복
  + 실무로 배우는 Quark
  + MLayout
  + iPod 강좌
  + html 강좌
  + 간단매뉴얼&팁
  + 5세대 iPod 강좌
  + iTunes 한 컷 강좌
  + iPod 한컷강좌
            


15회. 리얼베이직의 기초 -13- 퀵타임 (2)


지난 강좌에서는 퀵타임과 리얼베이직에서 퀵타임을 이용하는 방법 중 MoviePlayer 에 대해서 알아보았습니다. 그리고 NotePlayer 와 몇가지를 예제를 해보았습니다. 이번 강좌는 퀵타임 2번째로 지난 강좌에서 공부하지 못한 퀵타임의 나머지 부분에 대해서 공부를 해보도록 하겠습니다. 이번 퀵타임의 21번째 강좌를 통해서 리얼베이직에서 퀵타임을 다루는 대부분의 방법을 공부하고 알게 될 것입니다. 또한 동영상을 재생하거나 직접 만들 수 있는 그런 내용도 알게 될 것 입니다. 그럼 시작해 볼까요?

예제 다운받기


지난 강좌에 이어서 퀵타임을 지원하는 여러가지 클래스에 대해서 알아보도록 하겠습니다. 이번 강좌에서는 동영상을 만들 수 있는 EditableMovie 클래스 와 그외 클래스들..그리고 몇가지 함수에 대해서 알아보도록 하겠습니다.


OpenURLMovie 함수는 리얼베이직의 편리함을 나타내주는 대표적인 함수입니다. 이 함수는 인터넷에 있는 동영상을 손쉽게 보여줄 수 있는 함수 입니다. 사용법도 굉장히 편리합니다. 리턴값은 Movie 클래스 타입이고 인수로는 동영상이 링크되어있는 인터넷 주소를 사용합니다.
Movie = OpenURLMovie(인터넷 주소)
그럼 바로 예제를 통해서 확인해 보도록 하죠.

a. 그럼 우선 리얼베이직을 실행시킨 후에 Window1 내에 MoviePlayer 콘트롤을 하나 드래그 시켜서 화면을 구성합니다
*리얼베이직에서 동영상을 재생하기 위해서는 반드시 MoviePlayer 콘트롤이 필요하다는 것 잊지 마시기 바랍니다.

b. 화면 구성이 끝났으면 Window1의 Open 이벤트에 다음과 같은 코드를 작성합니다.
MoviePlayer1.Movie = OpenURLMovie("http://michelin.zdns.net/~michelin/movie/ipod-breakdance-30_r480.mov")
위의 코드 중 인터넷에 있는 동영상을 MoviePlayer 콘트롤의 Movie 속성에 가져오기 위해서 OpenURLMovie 함수를 이용하는 것을 확인할 수 있습니다. 인수로 사용된 주소는 제 홈페이지에 링크된 iPod 광고 동영상 입니다.

c. 간단하죠? 이제 Command + R 키를 눌러서 프로그램을 실행해 봅니다. 프로그램이 실행되면 동영상을 다운로드 받는 진행 모습을 눈으로 확인할 수 있을 것입니다.

이렇게 OpenURLMovie 함수는 손쉽게 인터넷의 동영상을 다운로드 받을 수 있게 해주기 때문에 사용하는 것에 따라서 많이 활용될 수 있습니다.


Graphics 클래스와 FolderItem 클래스를 공부하면서 그림 파일을 저장하는 내용을 공부한 것을 기억하고 계실 것입니다. 그때에는 FolderItem 클래스의 SaveAsPicture 나 SaveAsJpeg 함수를 이용해서 그림 파일을 저장했었죠. 또는 ExportPicture 함수를 이용해서 그림을 저장하였었습니다. 이러한 함수들은 모두 내부적으로는 QuickTime 을 기반하고 있다는 사실을 알고 계신지요. 따라서 퀵타임이 없으면 위의 그림을 저장하는 기능을 제대로 수행할 수 없는 경우가 많습니다. 위의 함수나 클래스에서의 문제는 그림 저장은 가능하되 세부적인 옵션 설정이 힘들었었습니다. ExportPicture 함수에서는 그나마 조금 설정이 가능했지만 그것도 한게이며 항상 Dialog 인터페이스를 통해서 저장을 하여야 한다는 점에서 활용도 면은 좀 떨어질 수도 있었습니다. QTGraphicsExporter 클래스와 GetQTGraphicsExporter 함수는 이러한 단점들을 해결해주는 직접적으로 QuickTime 을 이용하여 그림파일을 저장해주는 역할을 합니다.
그럼 QTGraphicsExporter 클래스와 GetQTGraphicsExporter 함수에 대해서 알아보도록 하겠습니다.

- QTGraphicsExporter 클래스
QTGraphicsExporter 클래스는 이름 그대로 그림을 Export 해주기 위한 클래스입니다. 따라서 이 클래스에는 데이타의 압축 비율이나 타입, Dialog 윈도우의 사용등을 지정할 수 있습니다. 그럼, 많은 내용은 아니니 세부적으로 알아보도록 하겠습니다.

a. 속성(Properties)
* CompressionQuality : 이 속성은 압축 비율을 나타냅니다. 압축 비율을 나타내기 위한 값으로는 정수형의 내용들을 갖고 그에 해당되는 값은 다음과 같습니다.
0 = Munimum qulity
256 = Low quality
512 = Normal quality
768 = High quality
1023 = Maximum quality
1024 = Lossless
이 속성의 데이타 타입은 정수형인 Integer 입니다.

* DefaultExtension : 이 속성은 저장될 데이타의 기본 확장자 명을 나타냅니다. JPEG 파일이면 'jpg"가 되겠죠. 데이타 타입은 문자형인 String 형입니다.
* DesiredTargetDataSize : 저장될 데이타의 Size 를 나타냅니다. 데이타 타입은 정수형인 Integer 입니다.
* HasSettingsDialog : 뒤에 나올 RequestSettings 속성에 의해서 Dialog 윈도우가 나타나게 되면 True 값을 갖게 됩니다. 데이타 타입은 참과 거짓을 나타내는 Boolean 형 입니다.
* OutputFileCreator : 저장될 파일의 MacCreator 를 지정합니다. 프로그램마다 갖고 있는 Creator 를 지정하게 됩니다. MacOS X 에서는 Creator 가 크게 의미가 없지만 클래식(9버젼대) 에서는 큰 의미를 갖습니다.
* OutputFileType : 저장될 파일의 타입을 지정합니다. JPEG 나 BMP 와 같은 파일의 타입을 지정해 줍니다. 이러한 타입은 잠시 뒤에 공부할 GetQTGraphicsExporter 함수의 내용을 고려해서 지정해줘야 합니다.
* RequestSettings : Dialog 윈도우를 보여줍니다. 뒤에 나올 예제를 통해서 어떻게 사용되는지 확인할 수 있습니다. 데이타 타입은 참과 거짓을 나타내는 Boolean 형 입니다.
* SettingsDescription : 저장되는 Setting 값을 나태냅니다. 바이너리 데이타로 되어있기 때문에 유저가 읽을 수는 없습니다. 이 값은 한번 지정된 값을 이용하여 똑같은 옵션으로 여러개의 파일을 저장하려고 할 때 사용됩니다. 그림을 보여주고 저장해주는 프로그램에서 환경설정 값등으로 이용할 수도 있겠죠. 데이타 타입은 문자형인 String 형입니다.

b. 함수(Methods)
* SavePicture : 이 함수는 인수로는 저장될 위치를 나타내는 FolderItem 을 나타내는 Location 값과 Picture 타입의 저장할 그림 데이타를 인수로 취하게 됩니다. Return 값으로는 참과 거짓을 나타내는 Boolean 값을 리턴하게 됩니다. 저장이 제대로 되면 True 를 리턴하고 뭔가 에러가 발생하게 되면 False 를 리턴하게 됩니다. 여기까지 QTGraphicsExporter 클래스의 내용입니다. 내용은 크게 어려운 부분이 없고 간단합니다. 뒤에 나올 GetQTGraphicsExporter 함수만 알고 나면 쉽게 이용할 수 있습니다. 이 클래스와 GetQTGraphicsExporter 함수는 그림 데이타를 저장하는 프로그램을 개발할 시에는 굉장히 유용한 기능들을 제공해줍니다. 그럼 GetQTGraphicsExporter 함수에 대해서 알아보도록 하죠.

- GetQTGraphicsExporter : 이 함수는 QTGraphicsExporter 클래스와 항상 같이 사용하게 됩니다. 이는 QTGraphicsExporter 클래스를 이용해서 그림 데이타를 저장할 때 어떠한 데이타 포맷으로 저장을 할 것인지를 처음에 지정해주고 QTGraphicsExporter 객체를 생성해주는 함수입니다.
GetQTGraphicsExporter 함수는 인수로 어떤 그래픽 파일로 저장을 할 것인가를 정하는 Format 값을 인수로 취합니다. Format 값은 문자형인 String 타입이고 4개의 문자로 구성이 됩니다. 저장가능한 포맷과 그에 대한 Format 값은 다음과 같습니다.
Format 설명
BMPf
PNGf
PNTG
8BPS
.SGI
TPIC
JPEG
BMP 파일의 포맷을 저장할 때 사용
PNG 파일의 포맷을 저장할 때 사용
MacPaint 파일의 포맷을 저장할 때 사용
Photoshop 파일의 포맷을 저장할 때 사용
SGI 파일의 포맷을 저장할 때 사용
Targa 파일의 포맷을 저장할 때 사용
JPEG 파일의 포맷을 저장할 때 사용
위의 포맷은 압축 방법이나 여러가지 옵션들이 서로서로 다릅니다. 따라서 QTGraphicsExporter 클래스는 위의 옵션에 따라서 서로 다른 설정 윈도우를 자동으로 제공해 줍니다. 온라인 도움말에는 나와있지 않지만 PICT, TIFF 포맷도 지원을 합니다. 다음은 해당 포맷에 따른 설정 윈도우 화면입니다.

그럼 간단한 예제를 통해서 QTGraphicsExporter 클래스와 GetQTGraphicsExporter 함수에 대해서 좀 더 자세히 알아보도록 하겠습니다.

a. 우선 제일 먼저 저장을 할 그림 소스를 준비합니다. Graphics 클래스를 이용해서 그림을 그려줘도 되지만 간단한 예제이기 때문에 필자는 PICT 타입의 임의의 그림 파일을 준비했습니다.
b. 그럼 이제 리얼베이직을 실행시키고 앞서 준비한 그림 소스를 프로젝트 윈도우에 드래그 하여 첨부시킵니다.

c. 이제는 PushButton 콘트롤을 Window1 내에 하나 드래그 하고 Caption 속성을 "Save"로 지정합니다.
d. 그리고 지금 생성한 PushButton 를 더블클릭 하여 코드에디터를 나타나게 하고 PushButton1 의 Action 이벤트 내에 다음과 같은 코드를 작성합니다.
Dim f as FolderItem
Dim exporter as QTGraphicsExporter
Dim mybool as Boolean

f=DesktopFolder().child("test")

exporter=GetQTGraphicsExporter("JPEG")

mybool=exporter.RequestSettings

exporter.DesiredTargetDatasize=1024
exporter.CompressionQuality=512
exporter.OutputFileType="JPEG"
exporter.OutputFileCreator="8BIM"

mybool=exporter.SavePicture(f,PrinterIcon1)

위이 코드 중 f 라는 FolderItem 객체는 파일을 저장하기 위한 경로를 지정하는 FolderItem 객체 입니다. 그리고 다음 코드는 GetQTGraphicsExporter 함수를 이용하여 JPEG 파일을 저장하기 위한 QTGraphicsExporter 객체를 생성하는 문입니다. QTGraphicsExporter 의 RequestSettings 속성은 위와 같이 Boolean 형 변수를 이용하여 사용을 해주면 해당되는 파일 포맷에 따른 Dialog 윈도우가 나타나고 설정을 할 수 있게 됩니다. 위의 코드중에서 GetQTGraphicsExporter("JPEG") 구문의 "JPEG" 인수 값을 PICT 나 TIFF 등으로 바꾸어 주면 해당되는 파일 포맷에 맞는 압축률을 지원하는 윈도우가 나타나게 됩니다.

e. 그럼 위의 코드를 작성한 후에 프로그램을 실행하여 확인해 보도록 합니다. 그럼 앞서 GetQTGraphicsExporter 함수를 공부할 때 확인했었던 JPEG 파일의 저장 화면이 나타나고 OK 버튼을 누르면 데스크탑에 Test 라는 JPEG 파일이 저장 될 것입니다.

*이번 예제는 예제폴더에 GraphicsExporterExample 폴더에 있는 예제를 링크해주시면 됩니다.


지금까지는 대부분 리얼베이직에서 퀵타임 동영상을 재생하거나 멀티미디어 데이타를 불러오기 등의 예제나 내용만을 다루었습니다. 이번에는 퀵타임 동영상을 제작할 수 있는 내용에 대해서 공부를 해보도록 하죠. 리얼베이직에서는 퀵타임 동영상을 제작하기 위해서 EditableMovie 라는 클래스를 갖추어 놓았습니다. EditableMovie 클래스를 이름에서도 확인할 수 있는 것 처럼 EditableMovie 클래스는 동영상을 생성하거나 수정, 또는 정보를 가져올 때 사용됩니다. 동영상의 재생은 MoviePlayer 콘트롤이 담당을 하고 동영상의 생성, 수정이나 모든 관리에 대한 부분은 EditableMovie 클래스에서 담당한다고 생각하시면 됩니다. 그럼 EditableMovie 클래스에 대해서 자세히 알아보도록 하겠습니다.


* Duration : 동영상의 재생시간을 초 단위로 나타내줍니다. 데이타 타입은 실수를 나타내는 Double 형입니다.
* EOF : 이 값이 True 이면 동영상의 끝을 나타내 줍니다. 따라서 동영상 데이타의 중간 부분의 값은 항상 False 가 되겠죠. For ~ Next 나 While 문등의 반복(Loop)문에서 동영상의 끝을 확인 할경우 사용됩니다. 데이타 타입은 참과 거짓을 나타내는 Boolean 형입니다.
* Handle : Toolbox 를 이용할 때 동영상 데이타의 Handle 값을 나타냅니다. 데이타 타입은 정수를 나타내는 Integer 형입니다.
* Picture : 현재 위치한 곳의 동영상 그림을 나타냅니다. 동영상이라함은 하나하나의 그림이 합쳐져서
* Position : 현재 동영상의 위치를 초단위로 나타내 줍니다. 데이타 타입은 실수를 나타내는 Double 형입니다.
* Poster : 동영상의 Poster Frame 을 나타내는 속성입니다.
QuickTime 동영상에서 Poster Frame 이란 처음에 동영상을 오픈했을 때 화면에 나타내는 동영상 이미지를 말합니다. 쉽게 말하면 처음 나타나는 위치를 말하는데요. 일반적인 동영상에서는 이 Poster Frame 이 첫 화면으로 지정이 되어있습니다. 하지만 중간의 이미지나 다른 곳을 지정할 수도 있지요. 이는 QuickTime Movie Player 에서 동영상을 오픈 한 다음 "지정 장면 설정"(Set Poster Frame) 을 지정하면 그 해당 위치가 poster Frame 으로 지정이 됩니다. 그리고 동영상을 오픈 할 때마다 그 위치가 첫 화면으로 나타나게 됩니다. Poster 속성의 데이타 타입은 그림을 나타내는 Picture 형식입니다.
* SaveOnClose : 이 값이 True 일 경우에는 영역을 벗어날 때 수정되거나 생성되는 동영상을 저장하고 업데이트 할 것입니다. 이 값이 False 일 경우에는 함수부분에 나올 CommitChanges 함수가 실행되어야만 변경된 내용이 저장 될 것입니다.
* SelLength : EditableMovie 클래스로 Open 된 동영상의 선택된 동영상 길이를 초 단위로 나타냅니다. EditField 의 SelLength 와 거의 동일한 기능이라고 보시면 되고 텍스트 대신에 동영상이라고 생각하시면 됩니다. 데이타 타입은 실수를 나타내는 Double 형입니다.
* SelStart : EditField 의 SelStart 처럼 선택된 동영상 내용중 처음 부분을 초단위로 나타냅니다. 데이타 타입은 실수를 나타내는 Double 형입니다.
* TimeDuration : TimeScale 값으로 Duration 속성을 표현해 줍니다. 데이타 타입은 정수를 나타내는 Integer 형입니다.
* TimeScale : 초당 1/TimeScale 단위로 동영상의 TimeScale 을 지정하는 속성입니다. 데이타 타입은 정수를 나타내는 Integer 형입니다.
* TimeValue : TimeScale 값으로 동영상의 현재 선택된 위치 값을 나타내는 속성입니다. 데이타 타입은 정수를 나타내는 Integer 형입니다.
* TrackCount : 동영상의 트랙 수를 나타내 줍니다. 데이타 타입은 정수를 나타내는 Integer 형입니다.
* UserData : QuickTime 동영상에는 여러가지 유저 정보를 지정하고 가져올 수 있습니다. 이러한 유저 정보들을 다루는 내용은 QTUserData 클래스에서 이루어 집니다. 이 속성은 QTUserData 클래스 타입으로 퀵타임 동영상의 여러가지 정보를 포함하고 있는 EditableMovie 클래스의 속성입니다. 이에 대해서는 뒤에 QTUserData 클래스를 공부할 때 자세히 공부해 보도록 하겠습니다.


* AppendMovieSegment : 동영상을 추가하는 함수입니다. 지정된 동영상을 지정된 위치에 지정된 길이만큼 추가를 할 수 있습니다. 이를 위해서 다음의 4가지 인수를 사용합니다.
- SourceMovie As Movie : Movie 타입의 동영상 데이타를 나타냅니다.
- SourcePosition as Double : 동영상이 추가될 해당 위치를 나타냅니다.
- SourceDuration as Double : 추가되는 동영상의 시간 길이를 나타내줍니다.
- ShowProgress as Boolean : 이 값이 True 이면 추가될 때 Modal Dialog 타입의 윈도우로 추가 진행 내용을 Progressbar 로 나타내 줍니다.
* Clear : 현재 선택된 동영상 데이타를 삭제합니다. 이 선택된 값은 SelStart 로부터 시작하여 SelLength 만큼선택 된 내용을 나타냅니다.
* CommitChanges : 이 함수는 EditableMovie 클래스를 통해서 수정된 동영상의 내용을 저장해주는 역할을 하는 함수입니다. 이 함수를 하지 않고 자동으로 하려고 저장하게 하려면 앞서 배운 SaveOnClose 속성이 True 로 설정되어있으면 됩니다. 하지만 이 함수를 통해서 수시로 저장하도록 하면 비이상적인 오류가 발생시에 애써 수정하거나 생성한 데이타를 잃어버릴 수 있는 위험을 좀 줄여 줄 수도 있을 것 입니다. 제대로 변경된 내용이 저장이 되면 True 를 리턴해주고 어떤 에러가 발생한다고 하면 False 를 리턴해 줍니다.
* Copy : 선택된 동영상의 영역을 Clipboard 로 복사를 해주는 역할을 합니다. Clear 함수 처럼 SelStart 와 SelLength 속성 사이에 선택된 내용을 Clipboard 로 복사를 합니다.
* Cut : Copy 함수는 복사를 하지만 Cut 함수는 복사를 하고 해당 영역을 삭제합니다. 즉 Copy 함수와 Clear 함수를 동시에 해주는 역할을 합니다.
* DataSize : 지정된 동영상의 StartTime 과 DurationTime 사이의 동영상 내용을 Bytes 단위로 환상하여 크기를 나타냅니다. 사용하는 인수로는 정수형의 StartTime과 정수형의 DurationTime 값입니다. 리턴 값은 정수형의 데이타 사이즈를 리턴해 줍니다.
* Flatten : EditableMovie 데이타를 하나로 합쳐주고 지정된 FolderItem 으로 저장을 해줍니다. ResourceFork를 사용한다면 이 내용도 같이 합쳐줍니다. 윈도우즈 환경에서는 리소스가 사용되지 않기 때문에 자동으로 사용할수 없게 됩니다. 인수로 FastStart 라는 값을 True 로 설정하게 되면 인터넷 스트리밍 동영상의 FastStart 내용을 추가하게 됩니다. 사용하는 인수는 순서대로 다음의 4가지 입니다.
- Destination As FolderItem : 저장되는 위치와 파일을 나타내는 FolderItem 인수입니다.
- ResourceFork as Boolean : ResourceFork 를 사용하는 경우 True 가 됩니다. Windows 에서는 기본으로 False 가 됩니다.
- FastStart As Boolean : 인터넷 스트리밍을 위한 내용입니다. 이 값이 True 이면 스트리밍 동영상 생성시 FastStart 내용이 첨가 됩니다.
- ShowProgress as Boolean : AppendMovieSegment 함수에서처럼 진행 내용을 ProgressBar 로 나타내기 위한 속성입니다. True 면 별도의 Modal Window 가 나타나서 진행상태를 알려줍니다.
* InsertMovieSegment : 지정된 위치에 동영상을 추가해 줍니다. 인수로 사용되는 Movie 타입의 동영상 데이타 SourceMovie를 지정된 위치는 DestinationPosition 에 지정된 시간만큼 추가를 하게 됩니다. 저장하기 위한 SourceMovie 의 별도의 위치와 시간을 지정할 수 있습니다. 사용하는 인수는 순서대로 다음과 같습니다.
- SourceMovie as Movie : 추가하기 위한 동영상 데이타 입니다.
- SourcePosition as Double : 추가하려는 동영상 데이타의 위치 값을 나타냅니다. SourceDuration 인수와 함께 이 위치부터 Duration 내용까지를 추가하게 됩니다.
- SourceDuration as Double : 추가하려는 동영상 데이타의 시간 길이를 나타냅니다.
- DestinationPosition as Double : 추가되는 위치를 나타냅니다.
- ShowProgress as Boolean : AppendMovieSegment 함수에서처럼 진행 내용을 ProgressBar 로 나타내기 위한 속성입니다. True 면 별도의 Modal Window 가 나타나서 진행상태를 알려줍니다.
* NewSoundTrack : 새로운 사운드 트랙을 만들어 줍니다. 이 함수는 QTSoundTrack 클래스 타입의 객체를 생성해 줍니다. 이를 이용해서 EditableMovie 에 새로운 사운드 트랙을 추가할 수 있습니다. New 명령어를 통해서는 QTSoundTrack 객체를 생성할 수 없기 때문에 새로운 SoundTrack을 만들어 주려면 반드시 이 함수를 이용해야 합니다.
* NewVideoTrack : 새로운 Video Track 를 만들어 줍니다. 사용하는 인수로는 동영상의 가로/세로 폭 값을 인수로 사용하며 초당 프레임수를 나타내는 TimeScale 값을 인수로 사용합니다. 이 함수는 QTVideoTrack 클래스의 객체를 생성해 줍니다.
* Paste : 클립보드에 복사된 동영상 데이타를 추가해주는 역할을 합니다. SelStart 부분에 추가가 되며 SelLength 영역도 지정되어있다면 그 내용은 삭제가 되고 Clipboard 에 있는 내용이 추가가 됩니다.
* RestoreRedoEditState : UnDo 한 작업을 Redo 해 줍니다.
* RestoreUndoEditState : 이전의 작업으로 전환을 해줍니다.
* SacleMovieSegment : 선택된 동영사의 Duration 을 변경시켜 줍니다. 선택된 영역은 SelStart 와 SelLength로 알수 있는데 SelStart 와 SelLength 값이 0이면 전체 선택과 동일 합니다. 사용하는 인수로는 순서대로 다음과 같습니다.
- StartPosition as Double : Duration 을 변경하기 위한 시작 지점
- OldDuration as Double : 기존의 Duration 값
- NewDuration as Double : 새로운 Duration 값
- ShowProgress as Boolean : AppendMovieSegment 함수에서처럼 진행 내용을 ProgressBar 로 나타내기 위한 속성입니다. True 면 별도의 Modal Window 가 나타나서 진행상태를 알려줍니다.
* SetRedoEditState : 이 함수를 이용하여 변경된 상태를 저장하게 되면 RestoreRedoEditState 함수를 이용하여 기존의 상태로 다시 변경할 수 있습니다.
* SetUndoEditState : 이 함수 역시 RestoreUndoEditState 함수를 이용하여 기존의 상태로 다시 변경할 수 있도록 합니다.
* SoundTrack : EditableMovie 클래스의 SoundTrack 을 구할 때 사용됩니다. 여러개의 SoundTrack 이 존재할 수 있기 때문에 Index 값을 인수로 사용하여 해당 SoundTrack 을 가져옵니다. Index 값은 기존의 배열들과는 다르게 0값을 기본으로 갖지 않고 1 값을 기본으로 갖습니다. 리턴 타입은 QTSoundTrack 클래스 객체를 리턴해 줍니다.
* VideoTrack : SoundTrack 과 마찬가지로 VideoTrack 을 구해주는 함수입니다. 내용은 SoundTrack 함수와 동일합니다. 리턴 타입은 QTVideoTrack 클래스 객체를 리턴해 줍니다.
* Track : 기본적인 Track 을 구해줍니다. 리턴 타입은 QTTrack 클래스 입니다.
♨ 참조 : TimeScale 값은 초당 60분의 1초를 말합니다.


그럼 예제를 통해서 EditableMovie 클래스에 대해서 알아보도록 하겠습니다. 예제를 통해서 어떻게 EditableMovie 클래스의 객체를 생성하고 함수들을 이용하며 동영상의 그림을 불러오고 저장하는지, 그리고 동영상을 만들 수 있는지 알아보도록 하겠습니다. 진부한 설명 보다는 예제를 한번 해보는 것이 기능을 익히는데 가장 좋다는 점 잊지 마시기 바랍니다.

동영상 데이타의 그림을 어떻게 불러올까를 고민하시는 분들이 많습니다. 이번 예제를 그러한 것을 가능하게 해주는 예제입니다. EditableMovie 클래스를 이용해서 중간중간의 그림 이미지를 가져오고 이미지를 볼 수 있는 예제를 해보도록 하겠습니다. 그럼 시작해 볼까요?

a. 인터페이스 만들기..
우선 제일 먼저 리얼베이직을 실행 시킵니다. 구성하려는 인터페이스는 Listbox 콘트롤을 이용하여 불러오는 그림 이미지를 순서대로 등록해서 볼 수 있도록 할 것입니다. 그리고 Canvas 콘트롤을 이용하여 그림을 그려주도록 할 것입니다. 그럼 실행리얼베이직에서 프로젝트 윈도우의 Window1 을 더블클릭하여 Window1 이 화면에 나타나도록 하고 Window1 의 Name 속성을 속성윈도우에서 "MainWin" 으로 바꾸어 줍니다.

이제는 가로세로(Width/Height) 속성을 속성윈도우에서 다음과 같이 설정합니다.
Width 550
Height 330
물론 위의 값대로 하지 않고 유저분들 임의대로 사이즈를 조절해도 상관없습니다. 크기가 클수도록 좋겠죠..^^;; 그리고 MainWin 의 타이틀 속성을 "동영상에서 그림 가져오기 예제" 로 설정합니다.

이제는 Listbox 콘트롤을 한개 왼쪽에 적절하게 배치시킵니다. 이 때에 ListBox 콘트롤은 Heading 속성도 없고 기본 ColumnCount 가 1 개로 지정되어있는 Listbox 콘트롤을 드래그 해서 생성해 줍니다. 그리고 생성된 Listbox1 콘트롤의 Name 속성을 속성윈도우에서 "ImageListbox"로 바꾸어 줍니다.

마지막으로 Canvas 콘트롤을 MainWin 위에 드래그 하여 ImageListbox 의 오른편에 생성을 합니다. 그리고 속성윈도우에서 Name 속성을 "ImageCanvas"로 바꾸어 줍니다. 그리고 ImageCanvas 의 Width/Height 속성을 각각 300으로 설정을 해 줍니다.
그럼 이제 인터페이스 구성은 끝났습니다. 완성된 그림은 다음과 같습니다.
b. 코드 작성
그럼 이제 코드를 작성해 보도록 합니다. 먼저 퀵타임 동영상을 불러 오기 위한 준비를 해야합니다. 퀵타임 동영상을 불러오기 위해서는 퀵타임 동영상만을 인식할 수 있는 필터를 추가해줘야합니다. 파일을 저장하거나 오픈 할 경우에는 항상 필터가 사용된다는 것 잊지 마시기 바랍니다. 그럼 우선 필터를 추가해 보도록 합니다. 필터는 지금까지 해온 예제에서 많이 해봐서 잘 알것입니다. Edit 메뉴에서 "File Types..." 항목을 선택하여 필터를 추가하면 됩니다. File Type 윈도우가 나타나면 Add 버튼을 눌러서 미리 준비되어있는 "video/quicktime" 필터를 추가합니다. 그리고 OK 버튼을 누르면 추가된 "video/quicktime" 필터를 File Types 윈도우에서 확인 할 수 있습니다.
필터를 추가했으면 이제 속성을 하나 추가해 봅니다. 지금 추가하려는 속성을 동영상의 이미지들을 연속적으로 저장하기 위한 Picture 타입의 배열 속성입니다. MainWin 내에 속성을 추가하여 MainWin 내에서 Global 변수로서 사용되게 하면 됩니다. 속성을 추가하는 방법은 잊지 않으셨겠죠? MainWin 의 임의의 화면을 더블클릭하여 코드 에디터가 나타나게 한 후에 Edit 메뉴에서 "New Property..." 항목을 선택하거나 Command + Option + P 키를 누르면 추가 속성 윈도우가 나타나고 새로운 속성을 추가할 수 있습니다.
*속성을 추가해주거나 함수를 만들어주거나 프로그램의 실행, 컴파일 등의 단축키는 항상 외워두시기 바랍니다.

코드에디터 윈도우에서 속성추가 윈도우가 SheetWindow 형식으로 나타나면 다음과 같은 속성을 추가합니다.
MovieImage(-1) as Picture
위의 변수 선언은 MovieImage 라는 변수명을 갖고 -1 을 초기 인덱스로 갖고 있는 Picture 타입의 배열을 선언한 것을 나타냅니다.

속성까지도 추가를 했으면 이제 프로그램이 제대로 동작을 하도록 코드를 작성해 보도록 하죠. 처음에는 프로그램이 실행되자마자 동영상 파일을 오픈하도록 할 것입니다. 따라서 처음에 추가한 "video/quicktime" 필터를 이용하여 FolderItem 의 GetOpenFolderItem 함수를 이용할 것입니다.
좀 더 자세한 설명을 작성 코드를 보면서 하도록 하죠. 그럼 이를 위해서 MainWin 의 Open 이벤트에 다음과 같은 코드를 작성합니다.
Dim f as FolderItem
Dim m as EditableMovie
dim p as Picture
dim i as Integer


f = GetOpenFolderItem("video/quicktime")
if f = nil then
return
end if

m=f.OpenEditableMovie


i = 1
while not m.EOF
i = i+1
m.position=i

movieImage.Append m.Picture
ImageListbox.AddRow "Image-"+str(i)

wend
위의 코드는 처음에 FolderItem 의 GetOpenFolderItem 함수를 이용하여 다이얼로그 윈도우를 통하여 동영상 파일을 선택하도록 하였습니다. 그코드가 처음에 나와있는 아래의 코드입니다.
f = GetOpenFolderItem("video/quicktime")
if f = nil then
return
end if
그 동영상 파일을 FolderItem 의 OpenEditableMovie 함수를 이용하여 EditableMovie 객체인 m 을 초기화 해주도록 하는 코드입니다.
m=f.OpenEditableMovie
단지 한줄로써 EditableMovie 객체인 m을 초기화 해서 생성해주었습니다. 간단하죠?
그리고 While 반복문을 통하여 1초 간격으로 오픈한 동영상의 해당 프레임을 그림이미지로 저장을 해주도록 하였습니다. 저장되는 곳은 처음 Global 속성으로 지정한 Picture 타입의 MovieImage 배열입니다. 대신 ImageListbox 에도 그 순서와 내용을 입력해주기 위해서 i 라는 정수형 변수를 사용하여 그 순서를 체크하도록 하였습니다. 그 코드가 다음의 부분입니다.
i = 0
while not m.EOF
i = i+1
m.position=i

movieImage.Append m.Picture
ImageListbox.AddRow "Image-"+str(i)

wend
이제 동영상의 각각 이미지를 불러오는 코드는 모두 작성을 하였습니다. 이제 불러온 동영상 데이타의 그림 이미지들을 ImageCanvas 에 보여주기 위한 코드를 작성해주도록 하겠습니다. ImageListbox 에는 추가된 이미지 순서가 추가되어있습니다. 이를 클릭하면 ImageCanvas 에 불러온 해당 이미지가 보여지도록 하겠습니다.
코드에디터에서 ImageListbox 콘트롤을 선택합니다. ImageListbox 에는 Listbox 콘트롤에 항상 있는 Change 이벤트가 있습니다. 이곳에 다음과 같은 코드를 작성합니다.
dim p, p2 as Picture

if me.ListIndex = -1 then
return
end if


p = NewPicture(ImageCanvas.Width, ImageCanvas.Height, 32)

p2 = movieImage(me.ListIndex)
p.Graphics.DrawPicture p2, 0, 0, ImageCanvas.Width, ImageCanvas.Height, 0, 0, p2.Width, p2.Height

ImageCanvas.Backdrop = p
위의 코드는 ImageListbox 콘트롤의 ListIndex 값과 추가된 그림 데이타를 저장하고 있는 movieImage 배열과 순번이 같게 된다는 점을 이용하여 선택된 ListIndex 순번에 맞는 그림 데이타를 불러와서 ImageCanvas 의 Backdrop 속성에 대입을 하여 그림을 나타내도록 해주는 코드 입니다.
이제 코드는 모두 작성을 하였습니다. 프로그램을 실행해서 확인해 보도록 합니다.

c. 프로그램의 실행
Command + R 키를 눌러서 프로그램을 실행해 봅니다. 그럼 처음에 프로그램이 실행하게 되면 동영상 파일을 선택하는 다이얼로그 윈도우가 나타날 것입니다. 그 윈도우 내에서 퀵타임 동영상 파일을 선택하시기 바랍니다. 필자는 항상 사용하는 iPod 동영상을 선택하였습니다.
해당 동영상을 선택하게 되면 잠시 시간은 걸리지만 해당 이미지들을 모두 불러와서 MovieImage 배열에 추가되게 됩니다. 그리고 ImageListbox 내에도 MovieImage 에 추가된 이미지 갯수만큼 내용이 추가되게 됩니다. 그 후에 추가된 내용을 ImageListbox 내에서 선택하여 볼 수 있습니다.

위의 예제에서 숫자들은 1초 단위를 나타내 줍니다. 위의 동영상은 약 46초 정도의 플레이 시간을 갖는 다는 것을 불러온 이미지의 갯수를 통해 알수도 있습니다. 여튼 왼쪽 리스트에 불러진 이미지명을 하나하나 클릭을 해보시기 바랍니다. 그럼 그에 해당하는 동영상 프레임을 확인 하실 수 있을 것입니다.

d. 예제 응용...
그럼 이제 예제를 약간 더 응용해 보도록 하죠. 그냥 그림을 보기만 하는 것이 아니라 Import 한 그림을 저장할 수 있도록 기능을 추가해보겠습니다.
그럼 위의 예제를 이어서 해보도록 하죠. 위의 예제를 오픈 한 뒤에 프로젝트 윈도우에서 MainWin을 선택하고 Height 속성을 350 으로 변경하여 세로 사이즈를 좀 더 크게 해줍니다.


그리고 PushButton 을 ImageListbox 왼쪽하단에 하나 추가합니다. 그리고 생성된 PushButton1 의 Name 속성을 "SaveImageButton" 으로 바꾸어 줍니다. 그리고 SaveImageButton 의 Caption 속성을 "Save Image"으로 바꾸어 줍니다. 또한 기본 버튼 사이즈로는 위의 Caption을 제대로 나타낼 수 없기 때문에 ImageListbox의 폭만큼 SaveImageButton 의 가로폭을 마우스로 조절해 줍니다.
그럼 다음과 같이 버튼이 만들어질 것입니다.
그럼 이제 코드를 작성하면 됩니다. 그런데 코드를 작성하기 전에 다음과 같이 해보도록 합니다. Command 버튼과 Shift 버튼을 동시에 누르고 SaveImageButton 을 클릭하여 드래그 해봅니다. 그럼 먼가를 연결해주는 것 같은 선이 하나 나타날 것입니다. 그럼 그 선을 ImageListbox 에 연결해 줍니다. 그럼 ImageListbox 테두리에는 선이 생기면서 선택이 됐다라는 표시가 나타납니다.
그렇게 선택을 하고 마우스 클릭을 풀어주면 다음과 같은 메세지가 나타날 것입니다.
위의 내용을 선택하고 OK 버튼을 누르면 SaveImageButton 콘트롤과 ImageListbox 는 서로 연결이 됩니다. 이런식으로 콘트롤간을 연결시켜주는 작업을 Binding 이라 합니다. Binding 시에는 지정된 작업외에는 다른 작업은 선택할 수 없습니다. 위의 예에서는 1가지 작업만이 나타나는데 다른 작업일 경우에는 2개 이상의 선택 사항이 나타나기도 합니다.

위의 내용에서 나타났었던 "Enable SaveImageButton when ImageListbox has a selection" 이란 메세지는 말 그대로 ImageListbox 내의 리스트가 선택되었을 경우에만 SaveImageButton 이 활성화 된다라는 뜻입니다. 위의 작업은 별도의 코드를 작성하여도 생성할 수 있지만 이러한 Binding 기능을 이용하면 단 한줄의 코드도 작성하지 않고 기본 인터페이스에 충실한 기능들을 넣을 수 있습니다.
Binding 작업을 하였으면 코드를 작성해야 합니다. 코드를 작성하기 전에 그림 파일을 저장하기 위한 필터를 추가하도록 합니다. 이번 예제에서는 JPEG 파일로만 저장한다는 전제하게 필터를 추가하도록 하겠습니다. 앞서 "video/quicktime" 필터를 추가한 것과 똑같이 필터를 추가하면 됩니다. 대신에 이번에는 "image/jpeg" 필터를 추가하시면 됩니다.

이제는 코드를 작성해 보도록 합니다. MainWin 내에서 새로 만들어준 SaveImageButton 을 더블클릭하여 코드 에디터가 활성화되도록 하고 Action 이벤트에 다음과 같은 코드를 작성합니다.
dim f as FolderItem
dim p as Picture

f = GetSaveFolderItem("image/jpeg", "untitled.jpg")
if f = nil then
return
end if

p = ImageCanvas.Backdrop

f.SaveAsJPEG(p)
위의 코드는 마지막에 추가한 "image/jpeg" 필터를 기반으로 하여 GetSaveFolderItem 함수를 이용하여 그림을 저장해 주는 코드 입니다. GetSaveFolderItem 함수는 필터와 기본 파일명 2가지 인수를 사용하는데 이를 다음과 같이 작성하였음을 확인할 수 있습니다.
f = GetSaveFolderItem("image/jpeg", "untitled.jpg")
그리고 취소 버튼을 눌렀을 때 에러가 발생하지 않도록 에러 처리를 다음과 같이 하였습니다.
if f = nil then
return
end if
그리고 별도의 Picture 타입의 변수 p 에 ImageCanvas 의 BackDrop 속성을 대입하였고 이 데이타를 바로 FolderItem 의 SaveAsJPEG 함수를 이용하여 JPEG 포맷으로 저장을 하였습니다.
그 소스는 다음과 같습니다.
p = ImageCanvas.Backdrop

f.SaveAsJPEG(p)
*좀 더 응용을 한다면 앞서 배웠던 QTGraphicsExporter 클래스를 이용하여 다양한 포맷으로 저장을 할 수도 있을 것입니다.
이제 프로그램을 실행(Command + R)을 해서 테스트를 해봅니다. 동영상 파일을 선택 한 후에 불러들인 이미지를 선택하고 Save Image 버튼을 눌러서 그림 파일을 저장해보시기 바랍니다.
* 이 예제는 예제폴더에 Example2.rb 파일을 링크해주시면 됩니다.


그럼 이번에는 동영상을 새롭게 생성하는 예제를 해보도록 하겠습니다. 기존의 동영상을 불러오는 것도 중요하지만 실질적으로 스스로 퀵타임 동영상을 만드는 것이 더 중요하겠지요. 동영상은 손쉽게 말하면 여러개의 이미지가 연결이 되어서 마치 활동사진처럼 보이게 되는 것이라 할 수 있겠습니다. 이와 같은 원리로 퀵타임 동영상을 만들 때에도 여러개의 이미지를 순서대로 나열하여 하나의 퀵타임 동영상 포맷으로 저장을 하게 되면 그것이 바로 동영상 파일이 되는 것입니다.

그럼 예제를 통해서 알아보도록 하겠습니다. 예제를 시작하기 전에 동영상으로 만들 이미지를 여러개 준비해보도록 합니다. 필자는 앞서 했었던 예제를 통해서 그림 이미지를 10개 정도 준비했습니다. 동영상은 예전에 유명했던 pencil_test.mov 라는 동영상으로 연필이 매킨토시에서 나와서 이것저것 행동을 하는 동영상입니다. 뭐 원 동영상이야 어쨌던 여기 들어가 있는 프레임을 꺼내와서 10개의 이미지를 준비했습니다. 당연히 포맷은 JPEG 입니다. 하지만 동영상을 만드는데 있어서 포맷은 그리 중요하지 않으며 리얼베이직에서 오픈하여 읽어들일 수 있는 그래픽 이미지 포맷은 모두 가능합니다. 이 이미지들은 모두 가로 세로 300*300 사이즈를 갖는 이미지입니다.

리얼베이직을 실행시키고 난 뒤에 인터페이스를 설계하기 전에 먼저 준비했던 이미지 소스 10개를 프로젝트 윈도우에 추가를 시켜보도록 합니다. 필자는 프로젝트윈도우 내에 SampleImages 라는 폴더를 만들어서 그 안에 모든 이미지를 추가했습니다.

그럼 이제 동영상을 만들 소스가 준비되었으니 예제를 시작해 보도록 하죠.

- 인터페이스 설계
우선 먼저 Window1 의 내용을 설정하도록 합니다. 프로젝트 윈도우에서 Window1을 선택하고 속성윈도우에서 Name 속성을 먼저 "MainWin"으로 바꾸어 줍니다. 그리고 Width와 Height 속성을 각각 500, 420으로 설정합니다. 또한 MainWin 의 Title 속성도 "Create Movie"로 바꾸어 줍니다.

MainWin 의 내용을 설정했으니 이제 MainWin 왼쪽 부분에 HasHeading 속성이 False 이고 ColumnCount 가 1인 기본 Listbox 콘트롤을 드래그하여 위치시킵니다. 그리고 생성된 Listbox1 콘트롤의 Name 속성을 "ImageListbox" 로 바꾸어 줍니다. 그 다음으로는 ImageListbox 의 Width 와 Height 속성을 각각 130과 400으로 바꾸어 줍니다.그리고 ImageListbox 속성중 DefaultRowHeight 속성을 100으로 설정합니다.
우선 ImageListbox 에는 10개의 이미지를 나열해서 프리뷰 이미지를 보여줄 것입니다. 그 작은 이미지 사이즈를 모두 원이미지은 300*300에서 100*100 사이즈로 축소해서 보여주기 위함입니다. 그래서 DefaultRowHeight 속성을 100으로 설정한 것입니다. 이제 ImageListbox 준비도 다 되었습니다. 그럼 다음에는 Canvas 콘트롤을 툴바에서 드래그 하여 ImageListbox 오른쪽에 적절히 위치시킵니다. 그리고 Name 속성을 "ImageCanvas"로 바꾸어 줍니다. 또한 ImageCanvas 콘트롤의 Width 와 Height 속성을 원 소스 이미지 사이즈인 300*300으로 설정을 해줍니다. 이제는 마지막으로 PushButton 콘트롤을 ImageCanvas 콘트롤의 하단에 위치시킵니다. 그리고 Name 속성을 "CreateMovieButton" 으로 바꾸어 줍니다. 그리고 CreateMovieButton 의 Caption 속성을 "Crreate Movie"로 바꾸어줍니다.
위와 같이 했으면 모든 화면 구성은 끝난 것입니다. 완성된 인터페이스는 다음과 같습니다.
*인터페이스를 자주자주 하다보면 지겹다는 생각도 들고 합니다. 하지만 최근의 GUI 를 기반으로 하고 있는 시스템 환경에서는 기능도 중요하지만 얼마나 프로그램을 이해하기 쉽게 화면을 구성하고 사용하기 쉽게 인터페이스를 만드는지에 대한 평가에 따라 얼마나 좋은 프로그램인가가 결정되는 경우가 많습니다. 거기다가 재미있게 프로그램을 사용할 수 있는지까지도 평가를 하는 사람들도 많기 때문에 프로그램의 인터페이스를 쉽게 생각해서는 안됩니다. 따라서 간단한 것이라도 많이 만들어보고 사용을 해봄으로써 좋은 인터페이스를 알고 구현할 수 있도록 연습을 많이 하시기 바랍니다.

- 코드 작성
그럼 이제 코드를 작성해 보도록 하겠습니다. 먼저 동영상을 만들어줄 이미지를 한꺼번에 저장할 MovieImage 라는 이름으로 Picture 타입의 배열을 하나 MainWin 내의 Global 속성으로 설정을 해줍니다. 속성을 추가하는 것은 다들 알고 계시죠? MainWin 을 더블클릭하여 코드에디터가 나타나게 한 다음 Edit 메뉴에서 New Property 항목을 선택하거나 Command + Option + P 키를 누르면 됩니다. 그럼 새로운 속성 추가 윈도우가 Sheet 윈도우 형태로 나타나고 이 안에 다음과 같이 배열을 추가합니다.
MovieImage(-1) as Picture

위 처럼 배열에 저장하기 위함은 지금과 같이 간단한 프로그램 프로그램 예제에서는 큰의미가 없을 수도 있지만 복잡하고 많은 기능을 갖는 프로그램에서 이러한 데이타를 손쉽게 코드로 불러내서 사용하고 코드를 좀 더 간결화 하거나 데이타를 손쉽게 관리하기 위해서는 반드시 필요한 방법입니다. 하지만 어떻게 데이타를 다루느냐는 사용하시는 분들의 선택이니 자신에게 편리한 방법을 사용하시기 바랍니다.

여튼 위와 같이 MovieImage 배열을 추가했으며 이제 실질적인 코드를 작성해보도록 하겠습니다. 우선 MainWin 의 Open 이벤트에 다음과 같은 코드를 추가합니다.
dim i as Integer

MovieImage.Append Image1
MovieImage.Append Image2
MovieImage.Append Image3
MovieImage.Append Image4
MovieImage.Append Image5
MovieImage.Append Image6
MovieImage.Append Image7
MovieImage.Append Image8
MovieImage.Append Image9
MovieImage.Append Image10

for i=1 to 10
ImageListBox.AddRow ""
next
위의 내용은 동영상을 만들기 위해 소스로 준비한 그림이미지 10개를 앞서 추가한 MovieImage 배열에 추가하는 코드입니다. 그리고 ImageListBox 에 내용이 나타나도록 ImageListBox 콘트롤의 항목을 Listbox 콘트롤의 AddRow 함수를 통해서 초기화를 했습니다. 이렇게 하면 Listbox 내용은 10항목이 입력이 되지만 아무런 값이 입력되지 않기 때문에 빈칸으로 나타나게 됩니다. 하지만 앞서 인터페이스를 만들 때 ImageListbox 의 DefaultRow 속성을 100으로 지정한 것을 기억하고 계실 것입니다. 즉 텍스트는 나타나지 않게 하고 이미지만 ImageListbox 에 나타나게 하기 위함이죠. 그럼 위 처럼 초기화가 끝났으면 ImageListbox 에 그림을 표현하기 위한 코드를 작성해 보도록 하겠습니다.

ImageListbox 를 더블클릭하여 코드에디터가 나타나게 하거나 코드에디터 상에서 Control 항목중 ImageListbox 콘트롤을 선택합니다. 그리고 ImageListbox 콘트롤의 CellTextPaint 이벤트에 다음과 같은 코드를 작성합니다.
g.DrawPicture MovieImage(row), 0, 0, 100, 100, 0, 0, 300, 300
아주 간단하죠? 이 단 한줄로 ImageListbox 의 셀에 동영상에 사용될 이미지를 표현할 수 있습니다. 이에 대해서 좀 더 자세히 설명해 드리도록 하겠습니다. ImageListbox 의 CellTextPaint 이벤트는 그림을 그려주기 위한 g 라는 Graphics 클래스 객체와 Listbox 콘트롤의 열을 나타내는 Row 라는 정수형 변수, 그림이 그려지기 위한 좌표값인 정수형 변수 x, y 를 인수로 사용하고 있습니다. 그래서 여기에서 g 라는 Graphics 객체를 이용하여 그림을 그려주는 것이고 그려지는 내용을 Row 값에 따라서 MovieImage 배열의 내용을 그려주는 것입니다. 내용은 한줄이지만 각각의 라인에 따라 서로 다른 Row 값이 적용되기 때문에 각셀에는 Row 값에 따른 MovieImage 배열의 이미지가 그려지게 됩니다. 그리고 이미지의 원 사이즈가 300*300 이었지요. 이것을 100*100으로 축소해서 그려주기 위해서 Graphics 클래스의 DrawPicture 함수의 옵션 파라미터를 이용하여 100*100으로 줄여서 그려지도록 설정했습니다.

이제는 셀을 선택했을 때 원이미지를 ImagCanvas 에 그려주는 코드를 작성해 보도록 하겠습니다. imageListbox 의 CellTextPaint 이벤트에 바로 밑에 위치하고 있는 Change 이벤트에 다음과 같은 코드를 작성합니다.
if me.ListIndex = -1 then
ImageCanvas.Backdrop = nil
return
end if

ImageCanvas.Backdrop = MovieImage(me.ListIndex)
위의 코드는 ImageListbox 콘트롤의 ListIndex 값을 이용하여 그에 해당하는 MovieImage 배열에 Index 값에 해당되는 그림을 가져와서 ImageCanvas 에 그려주도록 하는 코드 입니다. Listbox 콘트롤에서 해당 셀을 선택하지 않고 다른 영역을 선택하여 선택된 셀을 해제하게 되면 ListIndex 값은 -1 값을 갖게 됩니다. 따라서 값이 -1일 경우는 셀이 선택되지 않았을 경우이기 때문에 ImageCanvas 의 내용도 없어져야 합니다. 이를 체크하는 부분이 코드의 첫번째 부분이며 다음과 같은 코드 부분입니다.
if me.ListIndex = -1 then
ImageCanvas.Backdrop = nil
return
end if
대신 ImageListbox 콘트롤의 Listindex 값이 -1 이 아니면 셀이 선택된 경우이기 때문에 이럴 때에는 MovieImage 배열에서 인덱스에 해당하는 그림 데이타를 가져와서 ImageCanvas 콘트롤의 Backdrop 속성에 추가를 해주면 되죠. 그럼 그림이 ImageCanvas 콘트롤에 나타나게 됩니다. 이러한 코드가 바로
ImageCanvas.Backdrop = MovieImage(me.ListIndex)
부분입니다. 여기까지 하고 프로그램을 실행시키면 동영상을 만들지 않을 뿐 그림을 선택해서 보는 것이 가능해집니다.

지금까지는 인터페이스에 대한 코드 작성 부분이었고 이제 마지막으로 동영상을 만드는 코드를 작성해 보도록 하겠습니다. 이제 CreateMovieButton 의 Action 이벤트에 다음과 같은 코드를 작성합니다.
이 Action 이벤트에 작성되는 코드는 모두 동영상을 만들어주는 코드가 됩니다.
Dim track as QTVideoTrack
Dim m as EditableMovie
Dim f as FolderItem
dim i, Count as Integer

f=DesktopFolder.child("testmovie2")
m=f.CreateMovie

track=m.NewVideoTrack(300,300, 10)

Count = UBound(MovieImage)
for i=0 to Count
track.AppendPicture MovieImage(i)
next
위 코드에서 첫번 째에 지정되어있는 Track 이라는 변수는 QTVideoTrack 클래스 타입으로써 이는 동영상의 Track 을 만들 때 사용됩니다. 사운드를 추가한다고 하면 QTSoundTrack 클래스를 이용해야겠죠? m 이라는 변수는 EditableMovie 클래스 타입으로써 실질적인 동영상 데이타를 생성하여 저장해주는 역할을 합니다.

우선 처음에 작성된 코드는
f=DesktopFolder.child("testmovie2")
m=f.CreateMovie
입니다. 위의 코드 중에 f 라는 폴더아이템을 이용하여 먼저 저장될 파일의 위치를 지정해준 것입니다. 그리고 다음에 있는 m = f.CreateMovie 코드는 동영상을 생성해주는 FolderItem의 CreatMovie 함수입니다. 위의 코드에서는 특정 폴더가 아닌 DesktopFolder 에 동영상 파일이 생성되도록 하였습니다. 예전 파일에서 배웠던 SelectFolder 함수나 GetSaveFolderitem 함수, FolderItemDialog 클래스등을 이용하여 다이얼로그 윈도우의 인터페이스를 갖게 하여 임의적으로 저장될 곳을 지정할 수도 있을 것입니다. 여튼 이렇게 하면 동영상 파일은 생성이 된 것이죠. 하지만 동영상 파일만 생성이 되었을 뿐 파일 안에 동영상 데이타는 아직 없습니다. 그 이후에 실질적인 동영상 데이타를 저장해주는 코드가 있는 것이죠. 동영상 데이타를 저장하기 전에 먼저 해줘야 할 것은 Track 객체를 초기화 하는 것입니다.
track=m.NewVideoTrack(300,300, 10)

위의 코드는 VideoTrack 을 초기화 하여 QTVideoTrack 클래스의 객체인 Track 변수를 초기화 하는 코드입니다. 초기화를 해주는 함수는 EditableMovie 클래스의 NewVideoTrack 함수입니다. 이 함수는 앞서 EditableMovie 클래스의 함수 부분에서 공부를 했었습니다. 이 함수는 가로와 세로 값을 인수로 취하고 TimeDuration 값을 인수로 취합니다. 따라서 이미지 사이즈가 300*300이었기 때문에 가로 세로 값을 모두 300으로 정해준 것이며 TimeDuration 값을 10으로 저장해 줬습니다. TimeDuration 값은 값이 적을 수록 이미지간 동영상이 재생되는 시간이 길어지게 됩니다.

그리고 마지막 코드 부분은 실질적으로 track 에 이미지 데이타를 기록하여 VideoTrack 을 생성하여 동영상 데이타를 만들어주는 부분입니다. 그 코드가 바로 다음의 마지막 코드 부분입니다.
Count = UBound(MovieImage)
for i=0 to Count
track.AppendPicture MovieImage(i)
next
위의 코드는 MovieImage 배열의 값을 반복문을 이용해서 QTVideoTrack 클래스 객체인 Track 의 AppendPicture 함수를 이용하여 이미지 데이타를 추가해줍니다. 물론 위와 같이 하지않고 위의 코드를 다음과 같이 대체할 수도 있습니다.
track.AppendPicture image1
track.AppendPicture image2
track.AppendPicture image3
track.AppendPicture image4
track.AppendPicture image5
track.AppendPicture image6
track.AppendPicture image7
track.AppendPicture image8
track.AppendPicture image9
track.AppendPicture image10
위 처럼 10줄을 쓰는것 보다는 반복문을 이용하여 4줄로 하는것이 훨씬 효율적이겠죠? 물론 지금처럼 10개의 이미지 파일이 아니라 더욱 많은 이미지 파일을 이용한다고 하면 2번째 소스는 정말 코드 작성하기 지겨운 방법입니다. *반복문이나 조건문을 자주 사용하고 익숙해 지면 긴 코드를 효율적으로 짧게 작성할 수 있습니다. 이제 동영상을 만들어주는 코드도 모두 끝났습니다. 이제 프로그램을 실행해 보도록 하죠.

- 프로그램의 실행
이제 Command + R 키를 이용하여 프로그램을 실행해 봅니다. ImageListbox 에는 소스 이미지가 10개 나타나는 것을 확인할 수 있고 ImageListbox 셀을 선택했을 때 ImageCanvas 에 원 소스 이미지가 그려지는 것도 확인할 수 있습니다. 그리고 Create Movie 버튼을 눌러보시기 바랍니다. 그럼 지정한 것처럼 데스크탑에 Testmovie2 파일이 생성이 되고 동영상 파일이 만들어진것을 확인할 수 있습니다. 그리고 생성된 파일을 더블클릭하여 퀵타임 플레이어에서 제대로 동작이 되는지 확인해 보도록 합니다. 잘 되나요? 필자는 잘 되는군요..^^;;

- 프로그램의 수정
지금까지 동영상을 만들어 보도록 했습니다. 의외로 동영상을 만드는 것은 간단하다라고 느껴지지 않습니까? 그럼 여기에서 약간 수정을 해보도록 합니다. 앞서 생성했던 동영상 데이타는 크기가 1.7메가 정도 생성됩니다. 하지만 이 크기를 더욱 줄일 수 있습니다. 위의 1.7메가라는 사이즈는 전혀 압축이 되지 않은 사이즈입니다. 따라서 다른 효과나 프레임 수를 많이 하기 위해서 많은 이미지를 사용하거나 여러가지 효과를 주게 되면 파일의 사이즈는 굉장히 커지게 됩니다. 이럴 때에 사용되는 것이 바로 압축 기술입니다. 리얼베이직에서도 퀵타임 동영상 데이타를 저장할 때 압축을 할 수 있는 옵션 기능을 제공해 줍니다. 압축을 함으로써 동영상 데이타 파일을 2배에서 10배 이상 사이즈를 줄일 수도 있기 때문에 압축은 반드시 필요한 기능입니다.

그럼 앞서 했던 동영상 예제의 내용을 조금(아주 조금) 수정하여 압축을 할 수 있도록 하겠습니다. 바꿀 내용은 거의 없고 CreateMovieButton 의 Action 이벤트에 작성했던 코드에서 2줄만 추가하면 됩니다. 우선 처음에 변수들을 선언해주는 DIM 문에 다음과 같은 코드를 추가합니다.
dim b as Boolean
그리고 track=m.NewVideoTrack(300,300, 10) 코드 다음 줄에 다음과 같은 코드를 추가합니다.
b = Track.SelectCompressionSettings
동영상을 압축 하기 위해서는 QTVideoTrack 클래스의 SelectCompressionSettings 함수를 이용하면 됩니다. 그런데 이 함수는 참과 거짓의 Boolean 형 타입의 값을 리턴하기 때문에 b 라는 Boolean 형 변수를 선언 한 뒤에 위와 같이 코드를 작성한 것입니다. 그럼 완성된 코드는 다음과 같습니다.
Dim track as QTVideoTrack
Dim m as EditableMovie
Dim f as FolderItem
Dim i, Count as Integer
Dim b as Boolean //__________추가된 코드

f=DesktopFolder.child("testmovie2")
m=f.CreateMovie

track=m.NewVideoTrack(300,300, 10)

b = Track.SelectCompressionSettings //____________추가된 코드

Count = UBound(MovieImage)
for i=0 to Count
track.AppendPicture MovieImage(i)
next

이제 수정은 끝났습니다. 정말 간단하죠? 이제 프로그램을 실행해서 확인해 보도록 합니다. 프로그램 실행하는 것 아시죠? Command + R 키 입니다. 이전의 파일을 삭제를 하고 프로그램을 실행하여 다시 Create Movie 버튼을 누르면 이번에는 그냥 동영상 파일이 생성되는 것이 아니라 동영상을 압축하기 위한 윈도우가 나타날 것입니다.

이 윈도우에서는 Quality 값을 설정할 수 있으며 압축 포맷을 지정할 수 있습니다. 맨 위에 있는 팝업 메뉴를 선택하면 퀵타임에서 지원하는 모든 압축 코덱을 확인할 수 있습니다. 이 내용중에는 표준의 MPEG-4 압축도 있습니다. 당연하겠죠. 퀵타임은 MPEG 4를 기본적으로 지원하니까요.

해당 압축을 선택하고 OK 버튼을 누르면 똑같은 동영상 파일이 데스크탑에 생성이 될 것입니다. 하지만 파일 정보를 보시고 이전 것과 비교를 해보시기 바랍니다. 필자는 MPEG-4 로 압축을 했는데 104KB 의 사이즈로 줄었습니다. 이전 데이타에 비해서 거의 17배 정도가 준 것이군요. 아래의 파일 인포 창을 서로 비교해서 사이즈의 변화를 확인해 보시기 바랍니다. 그리고 독자분들도 한번 다르게 저장을 하여 압축 코덱마다 얼마나 차이가 나는지도 확인해 보면 재미있을 것 같습니다.


이제 동영상을 생성하는 것 까지 해보았으니 퀵타임 동영상에 특별한 효과를 넣는 것을 공부해보도록 하겠습니다. 퀵타임의 동영상 효과를 구현하는 것은 지금까지 동영상을 생성하는 것 보다는 좀 어렵습니다. 하지만 제대로 이해하면 쉽게 구현을 할 수 있으니 한번 알아보도록 하죠.

- 퀵타임 효과를 위한 클래스 및 함수들
퀵타임에는 기본적으로 지원하는 효과과 굉장히 많이 있습니다. 이러한 효과는 QTEffect 클래스를 기반으로 이루어 집니다. 그리고 QTEffect 클래스를 통해서 만들어진 효과는 QTEffectSequence 클래스를 통해서 각각의 프레임으로 만들어지며 이 프레임들이 Track 에 포함이 되어 하나의 동영상을 만드는 것이죠.

QTEffect 클래스는 스스로 객체를 만들 수 없으며 효과를 생성해주는 몇가지 함수와 같이 이용이 됩니다. 이때에 사용되는 함수들이 GetQTSMPTEffect 함수와 GETQTCrossFadeEffect 함수입니다. QTEffect 클래스는 어떠한 속성이나 함수도 갖고 있지 않죠. 단지 위의 함수를 이용해서 만들어진 효과를 잠시 저장을 해주는 보관함 정도라고 생각을 하시면 됩니다.
*GETQTCrossFadeEffect 함수 : 이 함수는 단순히 지정만 함으로써 한 화면에서 다음 화면으로 변환을 해주는 효과를 나타내 줍니다. Fade 라는 명칭에서 알 수 있듯이 하나의 화면이 다음 화면으로 점점 변환이 되는 효과를 말합니다. 이 함수는 사용하는 인수는 없으며 결과 값으로 QTEffect 객체를 리턴해 줍니다.
* GetQTSMPTEffect 함수 : 이 함수가 퀵타임의 모든 효과를 구현해주는 아주 중요한 함수입니다. 사용하는 인수로는 SMPTE effect ID 것을 인수로 사용합니다. 그런이 이 ID 값에 따라서 아주 다양한 효과를 연출해 주죠. 퀵타임에서는 굉장히 많은 효과를 기본으로 내장을 하고 있습니다. 그리고 그 효과는 어떤 ID 를 지정하느냐에 따라서 구현할 수 있는 것이죠. GetQTSMPTEEffect 함수도 리턴 값으로는 QTEffect 객체를 리턴해 줍니다. 다음은 SMPTE Effect ID 값에 대한 효과를 나타내는 표입니다.
*하나하나 타이핑하기 어려워서 이미지로 만들었음을 이해해주세요..^^;; SMPTE Effect ID 표 보기
*QTEffectSequence 클래스 : 이 클래스는 2개의 이미지를 이용하여 그 사이에 효과를 생성해주는 역할을 합니다. 사용하는 인수로는 QTEffect 클래스 객체와 2개의 이미지, 그리고 Frame 값을 사용합니다.
사용 문법 : result = New QTEFfectSeqduence(effect, Image1, Image2, Frames)
결과 값으로는 QTEffectSequence 객체를 리턴합니다. 그리고 이 객체를 이용해서 트랙에 효과가 적용된 이미지를 적용하게 됩니다. 좀 특이한 점은 New 함수를 이용하여 QTEFfectSeqduence 객체명을 지정해주는 것은 맞는데 처음 선언시에 인수를 사용한다는 점입니다. 이런 초기화는 C++ 의 객체 초기화 선언시에 자주 볼 수 있는 구문이지만 리얼베이직에서는 좀 생소할 수도 있을 것입니다. 물론 리얼베이직에서도 어떻게 클래스를 정의하느냐에 따라서 얼마든지 구현이 가능합니다. 하지만 단순한 사용이라는 취지로 인해서 클래스의 Open 이벤트나 초기 시에 포함시켜놓는 경우가 대부분입니다.

아무리 설명을 많이 해도 실질적으로 한번 해보는 것 보다는 덜 효과적입니다. 따라서 퀵타임의 동영상에 효과에 대한 예제를 해보도록 하죠.

- 그림 소스 준비
그럼 퀵타임 효과를 나타낼 2개의 이미지를 준비해 봅니다. 필자는 최근 많은 사람들의 관심을 끌고 있는 Airport Express 이미지 2가지를 준비해 봤습니다.

이 2가지 이미지 소스를 이용해 퀵타임 효과를 구현해 보도록 하겠습니다. *독자분들은 다른 이미지를 사용해도 무방합니다.
각각의 파일 이름은 Picture1, Picture2 로 지정을 하였습니다. 그럼 이 준비된 2개의 이미지를 리얼베이직의 프로젝트 윈도우에 추가를 합니다. 추가된 이미지는 다음과 같이 프로젝트 윈도우에 나타납니다. 이제 인터페이스를 구성해 보도록 합니다.

- 인터페이스 구성.
화면 인터페이스는 아주 간단합니다. 앞서 했었던 것 처럼 Window1 의 Name 속성을 "MainWin" 으로 바꾸어 줍니다. 그리고 Title 속성을 "Create Effect Movie" 로 설정합니다.

이제는 2개의 Canvas 콘트롤을 MainWin에 2개로 나열하고 Backdrop 속성을 각각 Picture1, Picture2 로 해줍니다. 준비한 그림 이미지가 좀 크기 때문에 좀 가로 영역을 넉넉하게 잡았습니다. 이제는 화면 맨 하단 중앙에 PushButton 콘트롤을 하나 드래그 하여 생성을 합니다. 그리고 Name 속성을 "CreateEffectButton" 으로 바꿉니다. 가로 크기인 Width 속성은 넉넉하게 210으로 잡고 Caption 속성을 "Create Effect" 로 바꾸어 줍니다. 그러면 인터페이스는 끝났습니다. 특별한 기능 보다도 준비한 2개의 소스를 이용하여 퀵타임 효과가 들어간 동영상 파일을 만드는 것이기 때문에 특별한 인터페이스는 필요가 없었습니다.

- 코드 작성
그럼 이제 코드만 작성하면 됩니다. 코드는 CreateEffectButton 의 Action 이벤트에만 작성하면 됩니다. 그럼 CreateEffectButton 을 더블클릭하여 코드에디터를 활성화시키고 버튼이 눌러졌을 때 이펙트 동영상이 만들어질 수 있도록 Action 이벤트에 다음과 같은 코드를 작성합니다.
Dim theEffect as QTEffect
Dim sequence as QTEffectSequence
Dim track as QTVideoTrack
Dim m as EditableMovie
Dim f as FolderItem
Dim p1, p2 as Picture
Dim i as Integer
Dim b as Boolean

p1 = Picture1
p2 = Picture2

f=DesktopFolder.child("testmovie3")

m=f.CreateMovie

theEffect=GetQTCrossFadeEffect

sequence=New QTEffectSequence(theEffect,p1,p2,96)

track=m.NewVideoTrack(p1.width, p1.height, 32)

b = Track.SelectCompressionSettings

for i=1 to 96
sequence.frame = i
track.AppendPicture sequence.image
next

위의 코드를 보면 실질 적인 코드 내용은 그리 많지 않습니다. 하지만 처음 변수 선언부를 보면 코드량 만큼 많은 변수들이 선언 되어있는 것을 확인할 수 있습니다. 이 부분을 잘 이해하지 않으면 괜히 간단하면서도 복잡하고 짜증나는 코드가 될 수 있습니다. 그럼 분석을 해보도록 하죠.

우선 먼저 처음 변수 선언부를 보도록 합니다. 변수 선언부 처음 3줄에는 차례대로 QTEffect 클래스 타입인 theEffect 라는 변수가 선언되어있고 QTEffectSequence 클래스 타입인 sequence, QTVideoTrack 클래스 타입인 track 이 선언되어있습니다. 퀵타임 효과를 위해서 먼저 필요한 것은 QTEffect 클래스 객체가 필요하다고 하였습니다. 그리고 QTEffect 에는 특별한 변수나 함수도 없으며 단지 퀵타임 동영상에 효과를 추기위한 내용을 지정하는 곳이라 앞서 잠시 언급했었습니다. 그리고 실질적인 퀵타임 효과가 구현이 되고 저장되는 부분은 QTEffectSequence 클래스 객체가 됩니다. 마지막으로 실질적인 동영상 트랙으로 저장이 되는 부분은 QTVideoTrack 클래스 객체입니다. 따라서 위의 3가지 theEffect, sequence, track 가 선언이 되는 것입니다.

선언문 다음의 처음 부분에는 좀 더 간단하게 코드를 작성하기 위해서 준비한 그림 소스를 별도의 Picture 타입의 객체에 대입을 하였습니다. 그리고 FolderItem 클래스 객체인 f 를 이용하여 실질적인 동영상이 저장되는 부분을 지정하였습니다. 앞서 했던 예제처럼 Desktop 폴더에 저장이 되도록 설정 하였습니다. 파일명은 "testmovie3" 파일이 되구요.
f=DesktopFolder.child("testmovie3")
이제 실질적인 동영상 파일을 만들기 위해서 EditableMovie 클래스 객체인 m 을 FolderItem 객체인 f 의 CreateMovie 함수를 이용했습니다.
m=f.CreateMovie
그 다음 코드는 QTEffect 클래스 객체인 theEffect 를 초기화 하고 퀵타임 효과를 지정하기 위해서 GetQTCrossFadeEffect함수를 이용하여 초기화 하였습니다.
theEffect=GetQTCrossFadeEffect
위의 GetQTCrossFadeEffect 함수를 이용한 퀵타임 효과는 다음 장면으로 점차 변환되도록 해준 함수이죠. 물론 GetQTSMPTEEffect 함수를 이용하여 별도의 SMPTE Effect 아이디를 이용하여 다른 효과를 지정할 수도 있습니다. 예를 들어서 다음 코드 처럼 말이죠.
theEffect= GetQTSMPTEEffect(104)
그 다음 코드는 QTEffectSequence 함수를 이용하여 QTEffectSequence 클래스 객체인 sequence를 초기화 하면서 실질적인 퀵타임 동영상 효과를 구현하게 됩니다.
sequence=New QTEffectSequence(theEffect,p1,p2,96)
여기에서 위의 코드중 QTEffectSequence 클래스는 객체를 초기화 할 때 인수를 사용한다는 점 잊지 마시기 바랍니다. 리얼베이직에서는 이런한 표현을 자주 사용하지 않기 때문에 기억하지 못할 경우가 많습니다. 여튼 위의 선언 내용중 96 이라는 값은 동영상의 프레임 수라는 것을 기억하시기 바랍니다
* 코드작성이 내용이 정확하지 않은 것 같다라고 생각들 경우에는 항상 온라인 도움말을 참고하시기 바랍니다. 그리고 나머지 부분은 QTVideoTrack 클래스 객체인 Track 을 초기하 하고 압축을 선언해주는 코드 입니다.
track=m.NewVideoTrack(p1.width, p1.height, 32)

b = Track.SelectCompressionSettings
마지막 for ~ next 구문 QTEffectSequence 클래스 객체인 sequence 가 초기화 될 때 선언된 프레임 수인 1~96까지 반복하면서 각각의 프레임 이미지를 QTVideoTrack 클래스 객체인 Track 에 대입을 해주는 반복문입니다. 이제 코드 작성도 모두 완료가 되었습니다. 리얼베이직을 실행시키고 확인해 보시기 바랍니다.

- 프로그램의 실행
Command + R 키를 눌러서 프로그램을 실행해 봅니다. 그럼 앞서 만들었던 인터페이스와 거의 유사하게 프로그램이 실행이 됩니다. 그럼 여기에서 Create Effect 버튼을 눌러서 퀵타임 효과가 들어가 있는 퀵타임 동영상을 생성해 봅니다. 코드 내용중 QTVideoTrack 클래스의 SelectCompressionSettings 함수를 이용해서 동영상 압축을 하도록 코드를 작성하였기 때문에 앞서 동영상을 생성했을 때 나타났던 압축 윈도우가 똑같이 나타나게 됩니다. 여기에서 앞서 테스트 했었던 것 처럼 압축 코덱을 MPEG-4 로 지정을 하고 OK 버튼을 누릅니다. 그럼 데스크탑에 "testmovie3" 라는 퀵타임 동영상 파일이 생길 것입니다. 이를 더블클릭해서 퀵타임 플레이어로 제대로 효과가 적용이 되었는지 확인을 해보시기 바랍니다.

테스트가 잘 이루어 졌다면 GetQTCrossFadeEffect 함수 대신 GetQTSMPTEEffect 함수를 이용해서 여러가지 퀵타임 동영상 효과도 확인해 보시기 바랍니다. *이 예제는 예제폴더에 QuickTimeEffect 폴더를 압축해서 링크해주시면 됩니다.


이번 강좌까지 하여 퀵타임에 대해서 알아보았습니다. 이번 강좌를 통해서 Mac OS X 의 멀티미디어 부분을 담당하는 퀵타임의 기능이 어떤것인지 대략적으로 아셨을 것입니다. 그리고 어떻게 리얼베이직에서 퀵타임을 이용하는지에 대해서도 아셨을 것입니다. 강력한 기능에 비해서 구현하기가 쉽고 간단한 사용법에 한번 놀랐을 것이고 특정 툴에 구애받지 않고 훌륭한 성능을 발휘하는 퀵타임에 대해서도 놀라셨으리라 생각을 합니다. 퀵타임이 구현하기 쉬운 부분은 리얼베이직이라서 쉬웠다기 보다는 퀵타임 자체가 어느 언어 어느 툴에서도 구현하기 쉽도록 설계가 되었기 때문입니다. 예제들은 간단했지만 차후 어떤 프로그램에 또는 어느 부분에 어떤 기능을 적용시킬 수 있겠구나 라는 것도 아셨으리라 생각을 합니다. 그리고 강좌에서의 예제말고도 더욱 많은 예제들을 통해서 멋진 프로그램들 만들어 보시기 바랍니다.

필자는 멀티미디어나 동영상에 관련한 전문가가 아니기 때문에 퀵타임을 100% 제대로 활용한다라고 말할 수 없습니다. 관련 업종의 전문 지시을 갖고 있는 분이 리얼베이직을 이용해서 퀵타임을 사용한다면 더욱 좋은 프로그램을 만들 수 있으리라 생각을 합니다.

다음에는 리얼베이직의 네트웍에 대해서 공부해보도록 하겠습니다.



다음글 - 16회. 리얼베이직의 기초 -14- 네트웍
현재글 - 15회. 리얼베이직의 기초 -13- 퀵타임 (2)
이전글 - 14회. 리얼베이직의 기초 -12- 퀵타임 (1)