あまつぶ

9.8 【レンズフレア】

 レンズフレアフィルタの件。これまでに対応したフィルタと違い、動画に対して使うようなフィルタだから、ダイアログで設定できるパラメータにはちょっと余分な部分もある。ま、無視すればいいからたいした問題ではないのだけど、QuickTime 4.0のリファレンスを見てみると、逆にダイアログでは設定できないパラメータがたくさんあることがわかった。
 ダイアログで設定できるのは4つ(フレアの位置は移動するから6つともとれるが)だけだが、なんと15もパラメータがある。中にはなにに使うのかよくわからないものもあるが、せっかくいろいろ指定ができるのならそのほうが面白い。ダイアログを自分で作るのは面倒なので、スクリプトで対応してみることにした。
 まずは自分自身にイベントを送ってそれを処理できるようにしなくてはいけないから、ダイアログで指定できる4つのパラメータだけ対応してみた。が、イベントを受け取ってからQTAtomContainerを作ってフィルタを適用してみてもなにも起こらない。パラメータをすべて埋めないといけないのかと思い、残りのパラメータも追加してみたが、それでもだめ。ダイアログが閉じられたあとのQTAtomContainerをもう一度確認してみると、中にあるQTAtomの数が違う。すべてのパラメータを追加したはずなのに1つ少ないのだ。
 すると、タイプ'lens'のQTAtomが最後に追加されていて、その中にパラメータの大半がもう一度繰り返して入っていた。なぜそのような構造になっているのかはわからないが、これにしたがってやってみると、ようやくちゃんと動いてくれた。理由はわからないが、動画に対して使うフィルタの場合は指定方法が違うのかな?
 ダイアログで指定する4つのパラメータについては最初に1回だけ指定されているだけだからそのあたりのスクリプト対応はたやすいと思うが、その他の設定は2回の指定の関係がどうなっているのかがわからないと難しそうだ。そこで、対応してみると面白そうな「Type」「Color」「Number」について、いろいろ変更して結果がどう変わるかをチェックしてみた。

 「Type」は、フレアの形を指定するもので、通常の「Spot」のほかに「Star Burst」や「Polygon」なんかを指定できる。これは面白そうだ。なぜか「Star Burst」はうまく動いてくれなかったが、その他については動いてくれるようになった。
 形に関連して、「Number」は、「Star Burst」の時はでっぱりの数、「Polygon」の時は角の数を指定するもの。形を変更できるようにするなら対応すべきものだ。1から20までを指定可能なのだけど、「Polygon」の場合、1のときは三角形、4のときは六角形と、つねに+2個だけ角があるという感じだ。
 フレアの色「Color」は、ドキュメントには「白か黒」と書かれていたが別にどんな色でもいいらしい。デフォルトでは白と書いてあるが、どうも{0x83E7,0x83E7,0x83E7}らしい。また、{0,0,0}(黒)にすると、なにもしないのと同じことで、フレアの明るさとも関係している感じかな。
 「Star Burst」がちゃんと動いてくれないのが残念だけど、ま、ダイアログで指定できないことまで指定できるようにできたんだからとりあえずは満足かな。ひょっとしたらQuickTimeのバグで、「Star Burst」がちゃんと動かないからダイアログで指定できないようになっているんじゃないかと邪推もできるけど(笑)。

 そんなわけでQT-Q 2.00b3をリリース。この変更のほかに、前に書いたエフェクトの設定を保存する機能を追加。別のファイルに保存するのではなくて最後に使った設定を初期設定に保存しておくだけだけど、前に比べれば使いやすくなったはず。
 それから、いくつかのメニューにショートカットを追加。「別名で保存」にCmd+Shift+Sなんかをつけられるといいなぁとずっと思っていたのだけど、MacOS 8.0以降ではOSがサポートしているらしいので使ってみることに。'xmnu'というリソースを追加するとコマンドキー以外のモディファイアキーを使ったショートカットがつけられるようになる。
 ソースの変更は、MenuKey()をMenuEvent()で置き換えるだけ(もちろん呼び出し方法は違うが)。OSのバージョンをチェックして、8.0以降ならMenuEvent()を、そうでなければMenuKey()を呼ぶようにすれば解決と。

to September 5, 1999 ↑ to September index → to September 9, 1999