酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Phoneで疑似着色する画像処理ライブラリ「AutoColoring for Windows Phone 7.5」をGitHubで公開しました

ビデオ編集ソフト「avisynth」に疑似着色する「GiCoCu*1」というE-Maleさんが書かれたプラグインがあります。

このプラグインのコードが公開されていたので、かれこれ2ヶ月前くらいにWindows Phoneアプリ上で動くように移植して、疑似着色させて*2遊んでいました。

-Windows Phoneアプリ上でグレイスケールの画像に自動着色させてみた - 酢ろぐ!


最初は公開するつもりでいたのですが、他人様のコードを別言語に翻訳する作業も初めてでザックリと動く様に移植した時点で満足してしまったので、名前空間をはじめクラス名やメソッド名まで練られたものにはなっていません(実際にこのコードを使う予定のアプリもなかったので……)。

このまま寝かせておくとメンテされずに放置されて、そのまま腐っていきそうだったので現状のままで公開することにしました。オリジナルコードではないものをGitHubに上げるのは初めてで、ライセンスはMITライセンスにしていますが、不慣れなものでして問題があればご指摘ください。

GitHub - CH3COOH/AutoColoring-for-Windows-Phone-7: paint color to monochrome images. for Windows Phone 7

とりあえずサンプル画像が動けば良いとの考えのもと、非同期処理のことなんて考えずに元画像を加工するクラスを用意しています。ビルドしたdllを参照した上で、以下のusingディレクティブを宣言してください。

|cs| using GenericVideoFilter; ||<

あとは画像を加工したいタイミングで以下のコードを実行してください。dllに内蔵されているカーブ情報を使って着色をおこないます。

|cs| // using default curves data. image.Source = GiCoCuLoader.Effect(_bitmap); ||<

おそらく加工する対象の画像が、人物が写ったモノクロ写真だったり漫画だったりで使用可能なカーブ情報が異なってくると思います。アプリの設定に応じてカーブ情報を変えたい場合は以下のコードのように、カスタマイズされたカーブファイルを読み込ませるようにしてください。

|cs| // using application's curves data. // TODO: gimp format only!! var res = Application.GetResourceStream(new Uri("hosei.cur", UriKind.Relative)); image.Source = GiCoCuLoader.Effect(_bitmap, new Curve(res.Stream, CurveTypes.Gimp)); ||<

*1:なんて読むのか不明……じこく?

*2:実際にはテーブルを用意しておいてRGB値とマッピングして置換する