【特集】

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

7 画像の作成

    木下誠  [2006/05/31]

    次に、画像を表すCIImageオブジェクトを作ろう。CIImageのクラスメソッドを使い、画像ファイルのパスや、画像のなまデータを指定することで作成できる。

        // 画像ファイルのパスを用意する
        NSString* path;
        ...

        // CIImageのインスタンスを作成する
        CIImage* image;
        image = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:path]];

    フィルタの作成

    そして、いよいよフィルタを作成する。ここまで、Core Imageでは100以上のフィルタが用意されていると何度も書いてきたが、フィルタを表すクラスはCIFilterただ一つである。このクラスを通して、すべてのフィルタを利用できる。

    フィルタの作成には、CIFilterのクラスメソッドfilterWithName:を使う。このメソッドに、フィルタの名前を文字列で与えるのである。フィルタの名前は、Core Imageドキュメントに記載されているので、そちらを参照することになる。または、filterNamesInCategory:というメソッドを使うと、カテゴリを指定して登録されているフィルタの名前を取得することができる。カテゴリ名は、CIFilterのヘッダで宣言されている。

    フィルタには、入力画像を含む、入力パラメータが定義されている。この値を設定することで、出力画像を調節できるのだが、これらはキー値コーディングで設定することになる。それぞれのフィルタが持つキーの値は、これもまたCore Imageドキュメントを参照しながら調べていくことになる。

    または、フィルタが持つキーの種類を、attributesメソッドで取り出すこともできる。これはいわば、フィルタのメタ情報ということになるだろう。

    では、実際にフィルタを作成して、いろいろな設定を行ってみよう。まず、画像の色の反転を行ってみよう。これには、CIColorInvertフィルタを使う。このフィルタは、入力パラメータとして、入力画像を表すキーinputImageを受け付ける。出力画像は、キーoutputImageを指定して取り出すことになる。

        // 入力画像を用意する
        CIImage* inputImage;
        ...
        
        // フィルタを作成する
        CIFilter* filter;
        filter = [CIFilter filterWithName:@"CIColorInvert"];
        // 入力パラメータをデフォルト値にする
        [filter setDefaults];
        
        // 入力画像を設定する
        [filter setValue:inputImage forKey:@"inputImage"];
        
        // 出力画像を取得する
        CIImage* outputImage;
        outputImage = [filter valueForKey:@"outputImage"];

    これだけで、色を反転した画像を得ることができる。

    ColroInverソースコード

    複数の入力パラメータを持つフィルタも試してみよう。色調を変えるための、CIColorControlsフィルタだ。

        // フィルタを作成する
        CIFilter* filter;
        filter = [CIFilter filterWithName:@"CIColorControls"];
        // 入力パラメータをデフォルト値にする
        [filter setDefaults];
        
        // 彩度を設定する
        [filter setValue:[NSNumber numberWithFloat:1.1f] forKey:@"inputSaturation"];
        // 輝度を設定する
        [filter setValue:[NSNumber numberWithFloat:0.2f] forKey:@"inputBrightness"];
        // コントラストを設定する
        [filter setValue:[NSNumber numberWithFloat:1.8f] forKey:@"inputContrast"];
        // 入力画像を設定する
        [filter setValue:inputImage forKey:@"inputImage"];

    入力パラメータには、それぞれデフォルトの値が定義されている。setDefaultsメソッドを呼ぶことで、入力パラメータにその値を設定できるので、フィルタを作成したら呼ぶようにしておこう。

    その後、入力パラメータのキーとともに、適切に値を設定していけば、望み通りのフィルタをかけることができる訳だ。

    ColorControl動作図

    ColorControlソースコード

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン