- 締切済み
GDI+で重なった画像をピンポイントに消去するにはどうしたらいいですか
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- magicalpass
- ベストアンサー率58% (378/648)
回答No.1
人が目で見て認識できるレベルでピンポイントに処理を行おうと思えば、それなりの手間がかかります。 表示される図形の大きさ、色、配置が固定されてわかっているのなら、そのデータを元に、下が背景だけの部分は背景色で塗りつぶし、下に図形がある部分はその図形の色で塗りつぶすというのが一番負荷の少ない方法です。 一例としては、 (1)別途、4つの図形それぞれのImageを保持しておく (2)Aという図形を消したいときは、AのImageからAが描画されている座標を順番に調べる (3)その座標についてA以外でレイヤーの一番上の図形(最後に描画して表に見えてる図形)があれば、その図形の色で描画する。無い場合は背景色。 (4)消去したい図解の数だけ繰返す しかし、一般的には「どんな図形が表示されてるのかわからない」「図形の位置が特定できない」というのが多いと思います。そういう時は方法としては3通りがあります。 1.一度全部消去してから必要なものだけをDrawImageで再描画 2.別に必要なものだけを描画したImageを用意しておき、それをDrawImageで描く 3.BeginContainer、EndContainerを使う、あるいはSave、Restoreメソッドで用意した画面を切り替える(スタック的にしか使えないのが難点ですが)
補足
画像を部分的に消去するには再描画か 事前に代わりの画像を用意しておくしかないんですか? 例えば、 1枚の紙だけに絵を描くといちいち消しゴムで消して描き直さなければなりませんが 透明な紙を何枚か用意して分けて描いておけば 消したいときは消したい部分が描かれた紙を取り除けば 描き直さずに消せますよね? こういうphotoshopのレイヤー機能みたいな やり方で画像を描画することはGDI+ではできないんですか?