画像の設定
IKImageViewの準備が完了したら、そこに画像を設定する。画像を設定するAPIは、2つ用意されている。setImage:imageProperties:と、setImageWithURL:だ。
IKImageView.h
- (void)setImage:(CGImageRef)image imageProperties:(NSDictionary*)properties;
- (void)setImageWithURL:(NSURL*)url;
setImage:imageProperties:では、Core Graphicsで画像を表す、CGImageRefを使って画像を設定している。第二引数に渡す画像のプロパティは、Core GraphicsのAPIを使って取得することが出来る。
もう1つのAPIであるsetImageWithURL:では、画像ファイルのパスをURLとして渡す。単純に保存してある画像ファイルを開きたい場合は、こちらが便利だろう。
余談になるが、Leopardで新たに追加されたグラフィック系のフレームワークを調べると、Objective-CのAPIであるにも関わらず、Cocoaで画像を表すNSImageではなく、Core GraphicsのCGImageなどを使っているケースが目につく。これは筆者の推測だが、Mac OS Xはグラフィックの機能を強化し続けているが、その発展にNSImageおよびCocoaのグラフィックシステムは対応しきれていないのではないだろうか。むしろ、もっと低レベルに位置する、Core Graphicsを進化させることに重きが置かれているのではないか、という感触を得た。
CocoaからCore Graphics APIを利用することは、もちろん問題なくできる。だがAPIがC言語になるため、大変便利になったObjective-C 2.0の恩恵を得ることが出来ない。このあたりの格差も解消してほしいと思う。
さて、IKImageViewに画像を設定してみよう。setImageWithURL:を使うと、次のようになる。
// 画像ファイルのURLを作成する
NSURL* url;
url = [NSURL fileURLWithPath:@"/Library/Desktop Pictures/Plants/Grass Blades.jpg"];
// 画像のURLを設定する
[_imageView setImageWithURL:url];
これで画像の表示を行うことが出来る。実行結果は、次のような感じだ。
ウインドウをリサイズすると、画像の大きさも変化する。パフォーマンスは、かなり良好だ。
エフェクトの適用
これだけでは、従来のNSImageViewを使ったものとあまり変わりはない。Image Kitには、もっと多くの機能がある。
表示している画像を、ダブルクリックしてみよう。すると、画像を編集するためのパネルが開く(この挙動は、doubleClickOpensImageEditPaneプロパティで設定出来る)。
Adjustのパネルでは、露出、ホワイトポイント、ブラックポイント、ガンマ値、彩度、コントラスト、明るさ、シャープネス、セピア調といった、画像編集が行える。簡単な写真のレタッチならば、これで済んでしまうだろう。
Effectsのパネルには、様々なエフェクトが並ぶ。白黒、セピア調、アンティーク調、色のフェード、色のブースト、シャープ、ぼかし、反転がある。
Detailでは、画像の詳細な情報を得ることが出来る。色空間や色深度といったものから、Exif情報まで取り出すことが出来る。
AdjustやEffectsで行われている画像処理は、Core Imageを使ったものだ。Image Kitは、Mac OS Xが持つ様々なグラフィックスフレームワークの機能を利用したものになっているということだ。