iOSでGPUImage3 / Core Imageのカスタムフィルターを作成する(GPUImage3編)

はじめに

iOSでフィルターなどの画像処理をする際にフレームワークを用いると実装がとても楽になります。
代表的なものとしてGPUImage3やCore Imageがあります。
そこでそれぞれのフレームワークでカスタムフィルターを試した際の注意した点をまとめてみました。

Core Image編はこちらにあります。

フレームワークについて

GPUImage3
Metalを使用したGPUアクセラレーションによるビデオおよび画像処理用のBSDライセンスのSwiftフレームワークです。https://github.com/BradLarson/GPUImage3

カスタムフィルターの作成

今回作成したのは、特定の色を取得してその部分を違う色に変換するという簡単なフィルターです。
GPUImage3は、Metal Shading Language (MSL)でカスタムフィルターを作成できるので今回はその方法を使用します。

以下の画像のR:128, G:128, B:128の部分を取得して、R:255, G:128, B:20に変換してみます。

mizutama

以下が実装したコードになります。

・フィルター呼び出し処理

・uniform変数を使う場合はclass作成

・カスタムフィルターの処理

実行すると以下の画像のようになります。

IMG_4956

注意した点

入力画像にカラー画像を使用する場合は問題ないのですが、
今回のように入力画像に白黒画像を使用したい場合に、カラーモードがインデックスカラーであると
GPUImage3内に書かれているMetalのTextureLoad部分でエラーになってしまいます。
フィルターをかける前にカラーモードがインデックスカラーになっていないことを確認してあげる必要があります。

Failed loading image textureのエラーが出たら確認してみてください。

 

次の記事では、Core Imageでのカスタムフィルターの作成について書いています。
よかったら見てみてください。

●この記事を書いた人