【特集】
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"];
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動作図 |
対応機種も出そろい、これからに期待
このように、Core Imageを使ったプログラミングは、少ない手間で、とても「派手」な効果を得ることができる。
その反面、Core Imageプログラミングの悩みの種は、対応機種が限られてしまうことだろう。登場当初は、ハイエンド機しか対応を行っていなかった。しかし、Tigerもリリースから1年近くがたち、現行販売されているほとんどの機種で対応するようになってきた。
Apertureのような本格的なソフトも登場し、Core Imageはまさにこれから活躍のときを迎えるだろう。
ヘッドライン
- Rambus、次世代携帯機器向けメモリ「モバイルXDR」を発表[21:16 2/9]エレクトロニクス
- Intel、基幹業務システム向け次世代プロセッサ「Itanium 9300」を発表[20:47 2/9]エレクトロニクス
- MicronとNanya、42nmプロセスを採用した2GビットDDR3を開発[20:07 2/9]エレクトロニクス
- ISSCC 2010 - 日立、1Gbpsあたり消費電力1mW以下のトランシーバ回路を開発[19:52 2/9]エレクトロニクス
- CSSを最適化する3つのツール[17:17 2/9]JavaScript / CSS / HTML
- TIOBEプログラミング言語人気 - Scratch/Erlang/Scala/JavaFX[17:17 2/9]プログラミング
- Microsoft、Red Hat Linuxサポートをひっそり追加[17:15 2/9]システム管理
- IBM、8コア/32MB eDRAM搭載の高速CPU「POWER7」を発表 - サーバも販売開始[17:02 2/9]サーバとストレージ
- 【レポート】UTM最新動向 - クラウドに耐えうる処理性能と管理性の強化が進む[14:42 2/9]セキュリティ
- あるコンパイラが重要なマイルストーンに到達、LLVM Clang[14:06 2/9]プログラミング







