Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

I phonedevws20121028ci filter

7,151 views

Published on

  • Be the first to comment

I phonedevws20121028ci filter

  1. 1. Core ImageCIFilterでの画像処理 iPhone Developer Workshop 2012/09/28
  2. 2. 自己紹介ZuQ9Nn(ずきゅ∼ん)最近はお仕事でObjective-c、iOSアプリを書いています。もともとはPHPなどサーバーサイドのプログラマ
  3. 3. 今回の勉強のきっかけAppStoreには、いっぱいトイカメラ系のアプリがあるけど、あれってどうやってつくってんの?
  4. 4. 今回のサンプルXcode 4.5.1iOS6ARCありStoryborardを使う
  5. 5. これまでの画像処理 Sepiatone(セピア)変換の例 UIImageからCGImageに変換しピクセ ルデータにアクセスする ピクセルデータからRGBを取得し変換SepiatoneNotCIFilterViewControllerのapplyFilterメソッドを参照
  6. 6. 画像処理の問題点 コードが長い コードを読んでも意味がわかりにくい 画像処理のロジックを学習する必要もう少し簡単で心理的ハードルが低いものはないか? Core ImageのCIFilter
  7. 7. CIFilterでのコードCoreImage.frameworkの追加を忘れずに!import文も忘れずに #import <CoreImage/CoreImage.h>
  8. 8. CIFilterでの処理の流れCIImageオブジェクトの作成CIFilterオブジェクトの作成と設定Filterを適用した画像の取得
  9. 9. 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メソッドを参照
  10. 10. CIFilter応用例(1)Filterによってはパラメーターを調整することで色の濃淡を簡単に変更することが可能
  11. 11. 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メソッドを参照
  12. 12. CIFilter応用例(2)FilterによってはRGBの値を変化させることによって全く違った画像処理が可能CIFilterのsetValue、InputColorの属性を指定する
  13. 13. 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メソッドを参照
  14. 14. CIFilterの応用例(3)FilterとFilterを組み合わせて新たなFilterを作成することが出来るプログラムのポイントはFilterごとにsetDefaultsを指定する
  15. 15. 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メソッドを参照
  16. 16. CIFilterのメリットコードが短い画像処理のロジックを知らなくてもFilter名とパラメータを指定することで簡単に画像処理が可能
  17. 17. CIFilterでメリットiOS5以降からしか使えないFilter名がどのような画像処理結果になるかわかりにくい定義されていない複雑な画像処理は出来ない資料が少ない
  18. 18. CIFilter資料(書籍)詳細iOS5プログラミングiOS5プログラミングブックiOS Core Frameworksテクニカルガイド
  19. 19. CIFilter資料(Web)OneWorldの開発ブログ iOS5 CoreImage フレームワーク使い方(http://oneworld-inc.jp/blog/?p=148)OneWorldの開発ブログ iOS5 CoreImageフィルタ(http://oneworld-inc.jp/blog/?p=191)
  20. 20. ご清聴ありがとうございました

×