遅い→起動時

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

参照レイヤーと描画レイヤーを分けたペイントツール10

d:id:pmint:20080322:p1の続き。


キャンバス上の色を反映するようなブラシのために、ブラシが参照するレイヤーと描画するレイヤーを分けた。

ペイントツール プロトタイプ10。
WindowsApplication1.zip

起動はここからClickOnceで。ClickOnceIE系で。
WindowsApplication1

操作

  1. 左ドラッグ(右でも可)
    …線を描く。
  2. 「CreateLayer」を押す
    …レイヤー作成。描画レイヤーが変わる。
  3. 「Brush3」を押す
    …ブラシを変える。
  4. 左ドラッグ(右でも可)
    …描いた線の色が変わる。

概要

「Brush3」使用時には「CreateLayer」を押したあとに描いた線が無視される。
参照レイヤーには無い線だから。


「CreateLayer」を押さずにBrush3を使うと、色が複雑に変化する。
参照レイヤーと描画レイヤーが同じで、加工後の線を繰り返し加工することになるから。




ブラシパターンを動的に作るようにした。
元々のブラシではi.pngというファイルをそのままブラシパターンとして使っていたけど、Brush3では参照レイヤー上の絵をブラシパターンにしている。
ただし、使うのはブラシの太さの分だけ。ブラシがあたっている範囲だけを切り抜いている。


切り抜きは独自の処理で。
矩形に切り抜くのなら何も工夫は要らないけど、今回は丸く切り抜くので。
円い窓の空いたマスク画像を生成し、参照レイヤー上の絵と合成している。
丸く切り抜ければいいのでマスク画像や合成処理は必要ないけど、丸以外にもいろいろな形や手描きのマスクパターンにも使えるので作っておいた。


この切り抜き時の合成処理が遅い。
レイヤーの合成方法に「オーバーレイ」や「乗算」などを用意すると、これと同じ処理を何重にも行うことになるのでひどく遅くなるはず。


色の変化は.NET FrameworkにあるGraphics*1によるもの。

*1:System.Drawing.Graphics