マイコミジャーナル

知りたい!を刺激する総合専門サイト


  1. エンタープライズ

  2. 特集
  3. Core Imageで体験 - Mac OS Xの高速画像処理

【特集】

Core Imageで体験 - Mac OS Xの高速画像処理

8 Rippleトランジションにもトライ

2006/05/31

木下誠

もう少し複雑なフィルタも試してみよう。トランジションフィルタの1つ、Rippleフィルタだ。波紋のようなトランジションエフェクトを作成する。

    // CIImageのインスタンスを作成する
    CIImage* inputImage;
    CIImage* inputTargetImage;
    CIImage* inputShadingImage;
    inputImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:path]];
    inputTargetImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:targetPath]];
    inputShadingImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:shadingPath]];
    
    // フィルタを作成する
    CIFilter* filter;
    filter = [CIFilter filterWithName:@"CIRippleTransition"];
    // 入力パラメータをデフォルト値にする
    [filter setDefaults];
    
    // 入力画像を設定する
    [filter setValue:inputImage forKey:@"inputImage"];
    // ターゲット画像を設定する
    [filter setValue:inputTargetImage forKey:@"inputTargetImage"];
    // 環境マップ画像を設定する
    [filter setValue:inputShadingImage forKey:@"inputShadingImage"];
    // トランジションが起きる領域を設定する
    [filter setValue:[CIVector vectorWithX:0 Y:0 Z:479 W:360] forKey:@"inputExtent"];
    // 波紋の中心を設定する
    [filter setValue:[CIVector vectorWithX:240 Y:180] forKey:@"inputCenter"];
    // トランジションの時間を設定する
    [filter setValue:[NSNumber numberWithFloat:0.4f] forKey:@"inputTime"];

このフィルタでは、入力画像が3つになる。まず、トランジションは、ある画像から別の画像へと変遷するものなので、オリジナルとターゲットの2枚の画像が必要になる。もう1つは、波紋を描くときに使われる、アルファ値を含む環境マップ画像だ。

これに加えて、トランジションの領域、波紋の中心点を設定する。これらの座標や領域は、CIVectorクラスを使って指定する。CIVectorでは、1次元から4次元までのベクトルを指定可能だ。

最後のトランジションの時間で、0.0から1.0の間で、変遷の度合いを設定する。この値を変化させながら連続して画像を表示すれば、トランジションアニメーションを作ることができる訳だ。

Ripple動作図

Rippleソースコード

対応機種も出そろい、これからに期待

このように、Core Imageを使ったプログラミングは、少ない手間で、とても「派手」な効果を得ることができる。

その反面、Core Imageプログラミングの悩みの種は、対応機種が限られてしまうことだろう。登場当初は、ハイエンド機しか対応を行っていなかった。しかし、Tigerもリリースから1年近くがたち、現行販売されているほとんどの機種で対応するようになってきた。

Apertureのような本格的なソフトも登場し、Core Imageはまさにこれから活躍のときを迎えるだろう。


特別企画

注目情報


特設サイトの必見情報



注目サイト