【iPhone】GPUImageで複数のフィルターを同時に使用する方法

概要

GPUImageを使用して、複数のフィルターを同時に使用する方法。
今回は、Brightness、Saturation、Contrastフィルターを同時に使用する。

■GPUImage
https://github.com/BradLarson/GPUImage

方法

下記のように実装します。

UIImage *inputImage = [UIImage imageNamed:@"Lenna.bmp"]; //元画像
GPUImagePicture *imagePicture = [[GPUImagePicture alloc] initWithImage:inputImage];
// 明るさ
// Brightness ranges from -1.0 to 1.0, with 0.0 as the normal level
GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
[brightnessFilter setBrightness:0.0];
[imagePicture addTarget:brightnessFilter];
// 彩度
// Saturation ranges from 0.0 (fully desaturated) to 2.0 (max saturation), with 1.0 as the normal level
GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init];
[saturationFilter setSaturation:1.9];
[brightnessFilter addTarget:saturationFilter];
// コントラスト
// Contrast ranges from 0.0 to 4.0 (max contrast), with 1.0 as the normal level
GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init];
[contrastFilter setContrast:0.8];
[saturationFilter addTarget:contrastFilter];
    
[imagePicture processImage];
UIImage *outputImage = [contrastFilter imageFromCurrentlyProcessedOutput];

実装方法としては、addTargetで順々につないでいき、
最後につないだフィルターでimageFromCurrentlyProcessedOutputを実行すると良いみたいです。
この方法以外に、グループを作ってフィルターをかけることも可能。
imagePicture - brightness
brightness - saturation
saturation - contrast
[imagePicture processImage];
[contrast imageFromCurrentlyProcessedOutput];

今回紹介したものをそのまま使用すれば、カメラアプリの色補正機能を実装することができます。
もちろん、その他のフィルターも使用可能なので試してみると良いかもしれません。

おすすめの書籍

Effective Objective-C 2.0

Effective Objective-C 2.0

定番のEffectiveシリーズ!