狠狠撸

狠狠撸Share a Scribd company logo
Core Image
CIFilterでの画像処理
  iPhone Developer Workshop
          2012/09/28
自己紹介

ZuQ9Nn(ずきゅ~ん)

最近はお仕事でObjective-c、iOSアプ
リを書いています。もともとはPHPな
どサーバーサイドのプログラマ
今回の勉強のきっかけ


AppStoreには、いっぱいトイカメラ系
のアプリがあるけど、あれってどう
やってつくってんの?
今回のサンプル

Xcode 4.5.1
iOS6
ARCあり

Storyborardを使う
これまでの画像処理
    Sepiatone(セピア)変換の例

    UIImageからCGImageに変換しピクセ
    ルデータにアクセスする

    ピクセルデータからRGBを取得し変換
SepiatoneNotCIFilterViewControllerのapplyFilterメソッドを参照
画像処理の问题点
   コードが長い

   コードを読んでも意味がわかりにくい

   画像処理のロジックを学習する必要


もう少し簡単で心理的ハードルが低いものはないか?

      Core ImageのCIFilter
CIFilterでのコード
CoreImage.frameworkの追加を忘れずに!




import文も忘れずに #import   <CoreImage/CoreImage.h>
CIFilterでの処理の流れ

CIImageオブジェクトの作成

CIFilterオブジェクトの作成と設定

Filterを適用した画像の取得
CIFilterでのコード
CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setDefaults];
[filter setValue:ciImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat: 0.9f] forKey:@"inputIntensity"];

CIImage *outputImage = filter.outputImage;

CIContext *context = [CIContext contextWithOptions: nil];
CGImageRef cgImage = [context createCGImage: outputImage fromRect:
outputImage.extent];
UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);

self.filterImageView.image = resultUIImage;

SepiatoneCIFilterViewControllerのapplyFilterメソッドを参照
CIFilter応用例(1)

Filterによってはパラメーターを調整す
ることで色の濃淡を簡単に変更するこ
とが可能
CISepiatoneコード改良
 CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

 CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
 [filter setDefaults];
 [filter setValue:ciImage forKey:@"inputImage"];
 [filter setValue:[NSNumber numberWithFloat: self.slider.value]
 forKey:@"inputIntensity"];

 CIImage *outputImage = filter.outputImage;

 CIContext *context = [CIContext contextWithOptions: nil];
 CGImageRef cgImage = [context createCGImage: outputImage fromRect:
 outputImage.extent];
 UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
 CGImageRelease(cgImage);

 self.filterImageView.image = resultUIImage;

SepiatoneCIFilterInputIntensityViewControllerのapplyFilterメ
ソッドを参照
CIFilter応用例(2)
FilterによってはRGBの値を変化させる
ことによって全く違った画像処理が可
能

CIFilterのsetValue、InputColorの属性
を指定する
CIMonochromeのコード
CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

CIFilter *filter = [CIFilter filterWithName:@"CIMonochrome"];
[filter setDefaults];
[filter setValue:ciImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat: 0.9f] forKey:@"inputIntensity"];

[filter setValue:[CIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f]
              forKey: @"inputColor"];

CIImage *outputImage = filter.outputImage;

CIContext *context = [CIContext contextWithOptions: nil];
CGImageRef cgImage = [context createCGImage: outputImage fromRect:
outputImage.extent];
UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);

self.filterImageView.image = resultUIImage;


MonochoromeViewControllerのapplyFilterメソッドを参照
CIFilterの応用例(3)

FilterとFilterを組み合わせて新たな
Filterを作成することが出来る

プログラムのポイントはFilterごとに
setDefaultsを指定する
CIColorInvert + CIHueAdjust
 CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

 CIFilter *colorInvertfilter = [CIFilter filterWithName:@"CIColorInvert"];
 [colorInvertfilter setDefaults];
 [colorInvertfilter setValue:ciImage forKey: @"inputImage"];

 CIFilter *hueAdjustFilter = [CIFilter filterWithName:@"CIHueAdjust"];
 [hueAdjustFilter setDefaults];
 [hueAdjustFilter setValue:[colorInvertfilter valueForKey:@"outputImage"]
 forKey:@"inputImage"];
 [hueAdjustFilter setValue:[NSNumber numberWithFloat:1.62] forKey:@"inputAngle"];

 CIImage *outputImage = [hueAdjustFilter valueForKey:@"outputImage"];

 CIContext *context = [CIContext contextWithOptions:nil];
 CGImageRef cgImage = [context createCGImage: outputImage fromRect:
 outputImage.extent];
 UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
 CGImageRelease(cgImage);

 self.colorInvertAndHueAdjustFilterImageView.image = resultUIImage;

CororInvertAndHueAdjustViewControllerの
applyColorInvertAndHueAdjustFilterメソッドを参照
CIFilterのメリット

コードが短い

画像処理のロジックを知らなくても
Filter名とパラメータを指定することで
簡単に画像処理が可能
CIFilterでメリット
iOS5以降からしか使えない

Filter名がどのような画像処理結果にな
るかわかりにくい

定義されていない複雑な画像処理は出
来ない

資料が少ない
CIFilter資料(書籍)

詳細iOS5プログラミング

iOS5プログラミングブック

iOS Core Frameworksテクニカルガイ
ド
CIFilter資料(Web)
OneWorldの開発ブログ iOS5 Core
Image フレームワーク使い方(http://
oneworld-inc.jp/blog/?p=148)
OneWorldの開発ブログ iOS5 Core
Imageフィルタ(http://oneworld-inc.jp/
blog/?p=191)
ご清聴ありがとうございました

More Related Content

I phonedevws20121028ci filter

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n