遅い→起動時

http://d.hatena.ne.jp/pmint/

クラスを再構成したペイントツール プロトタイプ17


ビューを実装。回転、拡大縮小、スクロールが可能。
操作は左ドラッグが円の描画、右ドラッグがスクロール。
回転、拡大縮小、スクロールとそれらのリセットなどはトラックバーやボタンで。


キャンバス(右側パネル)の赤い点は回転と拡大縮小の中心を表す。


描画の処理量を減らすため、タイルを導入した。表示処理で行なっているレイヤーの合成を部分的(タイル単位)に行なう。
ブラシ使用時に表示される灰色の正方形はタイルを表す。

ペイントツール プロトタイプ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)…選択中ツールにより異なるコマンドが処理を行う。


コントロールクラスの役割はレイヤーとコマンドが担う。
これらを作ることは、異なる画像処理ツールを開発するようなもの。
その他のクラスは画像処理ツール用のフレームワークとライブラリといった役割。


入力から描画までのコミュニケーション図

  1. CanvasPanel (Panel)の一部になっているPictureBoxとペンタブレットを関連付け
  2. ペンタブレットからPictureBoxに入力
  3. TabletPC APIで定義されてるイベントが発生
  4. 選択されているレイヤー呼び出し
  5. 選択されているツール(ブラシなど)呼び出し
    何をするかはツールで定義。


メニューバーやコマンドボタンなどからの入力でもレイヤーとツールを呼び出す点は同じ。

*1:対応しているWindowsは、Windows 7の大体のエディション(Starter以外)、Windows Vistaの大体のエディション(Home Basicだけは対応していない?)、Windows XP Tablet PC Edition。ハードはペンタブレットが導入されていればいい。