何枚かの画像をつなげて、次のようなムービーを作成してみましょう。
|
構成画像:
|
まず、画像群をダウンロードし、展開します。
| aString aURL aFilename aTGZ aDirectory aFileBrowser aWindow | aString := 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/VisualWorks/Exercises/Exercise_ParaPara/ParaPara.tgz'. aURL := JunURL named: aString. aURL exists ifFalse: [^nil]. aFilename := Filename defaultDirectory construct: aURL asURI tail. aURL downloadTo: aFilename. aFilename exists ifFalse: [^nil]. aTGZ := JunTGZ named: aFilename asString. aTGZ extractTo: Filename defaultDirectory asString. aDirectory := Filename defaultDirectory construct: 'ParaPara'. aDirectory := aDirectory construct: 'Dora'. aFileBrowser := #{Tools.FileTools.FileBrowser} value new. aFileBrowser open. aWindow := aFileBrowser builder ifNil: [^nil] ifNotNil: [:aBuilder | aBuilder window]. aWindow displayBox: (JunGeometry alignedBoxWithScreenCenter: 800 @ 600). aFileBrowser expandToDirectory: aDirectory; selectDirectory: aDirectory
|
次に、サンプルプログラムのソースをファイルインします。
| aString aURL aFilename aBrowser aWindow aPackage aNavigator aClass aProtocol aSelector | aString := 'http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/VisualWorks/Exercises/Exercise_ParaPara/Exercise-ParaPara.st'. aURL := JunURL named: aString. aURL exists ifFalse: [^nil]. aFilename := Filename defaultDirectory construct: aURL asURI tail. aURL downloadTo: aFilename. aFilename exists ifFalse: [^nil]. aFilename fileIn. aBrowser := #{Refactory.Browser.RefactoringBrowser} value open. aWindow := aBrowser builder ifNil: [^nil] ifNotNil: [:aBuilder | aBuilder window]. aWindow displayBox: (JunGeometry alignedBoxWithScreenCenter: 800 @ 600). aPackage := Store.Registry packageNamed: 'Foo-ParaPara'. aPackage ifNil: [^nil]. aNavigator := aBrowser navigator. aNavigator selectPundle: aPackage. aClass := #{ParaParaManga} value class. aProtocol := #examples. aSelector := #example0. (aNavigator state) classesAndNameSpaces: (Array with: aClass); protocols: (Array with: aProtocol); selectors: (Array with: aSelector). aNavigator setState: aNavigator state; changed
|
サンプルプログラムを見てみましょう。
ParaParaManga クラスの examples カテゴリに登録されています。
システムブラウザで、 「Foo-ParaPara」→「ParaParaManga」→ class タブ選択 →「examples」をたどってください。
ムービー(GIFアニメーションファイル)をカートゥーンムービー(パラパラまんが)として開いて表示します。
プログラム:"ParaParaManga example0."
| aFilename aMovie | aFilename := Filename defaultDirectory construct: 'Doraemon.gif'. aFilename exists ifFalse: [^nil]. aMovie := JunCartoonMovie filename: aFilename. aMovie ifNil: [^nil]. aMovie oneWay; openLightWeightWindowSpec. ^aMovie
|
JPEG 画像を読み込んで表示します。
プログラム:"ParaParaManga example1."
| aDirectory aFilename anImage | aDirectory := Filename defaultDirectory construct: 'ParaPara'. aDirectory := aDirectory construct: 'Dora'. aFilename := aDirectory construct: '1.jpg'. aFilename exists ifFalse: [^nil]. anImage := JunImageUtility fromFile: aFilename. JunImageUtility show: anImage. ^anImage
|
1枚の画像をムービーにします。
プログラム:"ParaParaManga example2."
| aFilename aGenerator | aFilename := Filename defaultDirectory construct: 'Doraemon.gif'. aGenerator := JunImagesToGifAnimation filename: aFilename extent: 296 @ 272. aGenerator do: [| aDirectory | aDirectory := Filename defaultDirectory construct: 'ParaPara'. aDirectory := aDirectory construct: 'Dora'. aFilename := aDirectory construct: '1.jpg'. aFilename exists ifTrue: [| anImage | anImage := JunImageUtility fromFile: aFilename. aGenerator addImage: anImage framesPerSecond: 1]]. ^aGenerator
|
8枚の画像をムービーにします。1fps(frames per second)で。
プログラム:"ParaParaManga example3."
| aFilename aGenerator | aFilename := Filename defaultDirectory construct: 'Doraemon.gif'. aGenerator := JunImagesToGifAnimation filename: aFilename extent: 296 @ 272. aGenerator do: [| aDirectory | aDirectory := Filename defaultDirectory construct: 'ParaPara'. aDirectory := aDirectory construct: 'Dora'. (1 to: 8 by: 1) do: [:aNumber | | aString | aString := aNumber printString , '.jpg'. aFilename := aDirectory construct: aString. aFilename exists ifTrue: [| anImage | anImage := JunImageUtility fromFile: aFilename. aGenerator addImage: anImage framesPerSecond: 1]]]. ^aGenerator
|
さらに(8枚を4回)繰り返して、適正なインターバル(5fps)も考慮します。
プログラム:"ParaParaManga example4."
| aFilename aGenerator | aFilename := Filename defaultDirectory construct: 'Doraemon.gif'. aGenerator := JunImagesToGifAnimation filename: aFilename extent: 296 @ 272. aGenerator do: [| aDirectory | aDirectory := Filename defaultDirectory construct: 'ParaPara'. aDirectory := aDirectory construct: 'Dora'. 4 timesRepeat: [(1 to: 8 by: 1) do: [:aNumber | | aString | aString := aNumber printString , '.jpg'. aFilename := aDirectory construct: aString. aFilename exists ifTrue: [| anImage | anImage := JunImageUtility fromFile: aFilename. aGenerator addImage: anImage framesPerSecond: 5]]]]. ^aGenerator
|
8枚の画像から8fpsのムービーを作成した後、 カートゥーンムービー(パラパラまんが)として開き、繰り返し再生を始めるプログラムを作成してください。
プログラム:"ParaParaManga example5."
|