はじめに
画像処理やデータ処理などのアプリケーションを作っていると、何らかの「手続き」を自動化したくなることがあります。例えば、画像データを読み込んで減色や縮小などの定型処理を行う、あるいは、サーバーからCSVファイルを読み込んで、レコードに計算など一定の処理を加えた上でDBに格納する、といった処理です。
こうした処理を毎回手作業で行うのではなく、あらかじめ処理の内容を記述しておいたテキストファイルに沿ってまとめて行えるようになれば、作業効率は飛躍的に向上するでしょう。
多くのソフトでは、こうした要求に答えるためにスクリプトインタープリタを実装し、ユーザーが行いたい手続きをテキストとして記述できるようになっています。本稿では、ごく簡単なものですが、こうしたスクリプトの実行系を実装してみたいと思います。
本稿で作成するのは、画像を読み込んで簡単な処理を加える画像処理アプリケーションです。画像の読み込みや画像に対する処理は、いずれも簡単なコマンドを並べたスクリプトで記述します。
対象読者
- GUIベースの.NET FrameworkアプリケーションをC#で作成したことがある方
必要環境
- .NET Framework SDK 1.1以上
本プログラムの構成
本アプリケーションは、画像を処理して表示する画像処理コンポーネントと、その画像処理コンポーネントや各種GUIを納めるフォームから構成されています。
フォームには、画像処理コンポーネントの他、スクリプトを入力するテキスト欄、実行経過(認識したコマンドや引数文字列)を表示するリードオンリーのテキスト欄、[実行]ボタンを配置しておきました。画像処理コンポーネントは、フォーム上に配置したスクロール可能なパネルに格納して、画像のサイズに応じて自動でスクロール表示されるようになっています。
アプリケーションを実行する際は、テキスト欄にスクリプトを入力し、[実行]ボタンをクリックします。処理の過程がテキストで表示され、処理結果の画像を画像処理コンポーネント上で確認できます。
スクリプトの書式
スクリプトは、次の形式で、1行に1つのコマンドを記述します。引数はカンマ区切り、数値はそのまま、ファイルパスなどの文字列は""
で囲んで記述します。
コマンド名(引数)
コマンドは、以下のものを用意しました。
コマンド名 | 機能 | 引数 |
load | 画像を読み込む | ファイルパス |
mirror | 左右反転 | なし |
upset | 上下反転 | なし |
addRGB | 各ピクセルのRGBに指定値を加算 | R加算値, G加算値, B加算値 |
resize | 指定サイズにリサイズ | 横幅, 高さ |
いずれも、.NET FrameworkのBitmap
やGraphics
の機能を使えば簡単に実現できるものです。ですから、最大の焦点は、文字列として渡されたスクリプトからコマンドや各引数を分離する処理であり、そしてその「意味」を認識する点にあります。