ビューを実装。回転、拡大縮小、スクロールが可能。
操作は左ドラッグが円の描画、右ドラッグがスクロール。
回転、拡大縮小、スクロールとそれらのリセットなどはトラックバーやボタンで。
キャンバス(右側パネル)の赤い点は回転と拡大縮小の中心を表す。
描画の処理量を減らすため、タイルを導入した。表示処理で行なっているレイヤーの合成を部分的(タイル単位)に行なう。
ブラシ使用時に表示される灰色の正方形はタイルを表す。
ペイントツール プロトタイプ17。
WindowsApplication1.zip
起動はここからClickOnceで。
※Microsoft.Inkを使用しているので、Windowsがペンタブレットを利用できる(コントロールパネルに「Tablet PC設定」がある)状態でなければ実行時例外が発生、試用できない。*1
WindowsApplication1
新しいクラス構成
クラスを再構成。
Microsoft.Ink(TabletPC API、デジタルインクのAPI)の入力部分を使用。
32ビット版。Microsoft.Inkが32ビット版しかないので。
キャンバスサイズは1000px四方程度。32ビット版 Windows 7では15000px程度が最大サイズらしい(色数は32bitARGBで)。それ以上のBitmapオブジェクトはページングファイルサイズに関わらず作成できない。
Brush系コマンドとLayerの関係はVisitorパターン。
ビューはUIの機能。入力と、全レイヤー合成後のドキュメントをビューの状態に基づいて変換する。
ビュー部分だけのサンプル d:id:pmint:20100801:p1
レイヤーとコマンドの追加がアプリのホットスポット。
- レイヤー(Layer)…数種類ある。ペンタブレットから入力があったとき、選択中レイヤーの種類により異なる処理が行われる。また、レイヤー選択時に選択可能ツールを入れ替える。
- コマンド(Command)…選択中ツールにより異なるコマンドが処理を行う。
コントロールクラスの役割はレイヤーとコマンドが担う。
これらを作ることは、異なる画像処理ツールを開発するようなもの。
その他のクラスは画像処理ツール用のフレームワークとライブラリといった役割。
- CanvasPanel (Panel)の一部になっているPictureBoxとペンタブレットを関連付け
- ペンタブレットからPictureBoxに入力
- TabletPC APIで定義されてるイベントが発生
- 選択されているレイヤー呼び出し
- 選択されているツール(ブラシなど)呼び出し
何をするかはツールで定義。
メニューバーやコマンドボタンなどからの入力でもレイヤーとツールを呼び出す点は同じ。
*1:対応しているWindowsは、Windows 7の大体のエディション(Starter以外)、Windows Vistaの大体のエディション(Home Basicだけは対応していない?)、Windows XP Tablet PC Edition。ハードはペンタブレットが導入されていればいい。