DOBON.NET DOBON.NETプログラミング掲示板過去ログ

線の高速消去について

環境/言語:[xp,VS2005,c#]
分類:[.NET]

はじめまして

C#にてピクチャーボックス上に線を描画するプログラムを作っているのですが、
描画した線の一部分を高速に消去したいのですが、なにか良い方法はありませんでしょうか?
ピクチャーボックスにはビットマップが埋め込まれておりまして、
上書きした線を消去した部分は埋め込んだビットマップが現れるようにしたいのです。
今まで、元のビットマップを領域指定で切り取って、消去したい部分に位置を特定して張り付ける
ということをやっておりましたが、どうしてもスピードが遅いのでなにか良い方法はないかと思案しております。

消したい部分を元絵(ビットマップ)が現れるペンで上書きする方法があればと思っています。

以上よろしくお願いいたします。
私の場合は似たような状況で、

描画内容を覚えておいて、
消去する部分を除いて下地の画像に
もう一度書き込むことで
あたかも消去したように見せています。

#とりあえずストレスのない程度のスピードで
#動いています。
ROY さん ご回答ありがとうございます

下地が一色なら、ペンで上書きが一番早いのですが
それだと元の絵も塗りつぶされてしまいますので、
消しゴムみたいなペンが無いかな なんて思っておりました。

元絵の切り貼りでスピードを追求してみます。

ありがとうございました。
解決済み!
■No17883に返信(pokoさんの記事)

エツです。おはようございます。

>
> 元絵の切り貼りでスピードを追求してみます。
>

この方法は大変難しそうに思います。私には見当がつきません。

ROYさんの方法は元のビットマップ(何も描画して無いビットマップ)に消したい線を除いて再描画する方法です。
私もこれをお勧めします。

再描画を高速にするには、描画すべき情報(座標、文字列、など)を予め作成して記憶しておき、描画するときはひたすら g.DrawLine(...) g.DrawString(...) g.DrawLines(...)等で描画します。
再描画時間は気にならないと思います。

ROYさんの
>描画内容を覚えておいて...
とはこのことです。

しつこいようですが描画データを作成しながら描画するのではなく、予め描画データを作成しておくのです。消したい直線は描画データから削除し、新たなデータは追加作成します。そして再描画するのです。


描画データを作成し分類して(直線の座標、円の座標、折れ線の座標、文字列の座標と文字列自体...)各分類を一気に表示させると、高速に再描画できます。


> 元絵の切り貼りでスピードを追求してみます。
これで満足できない場合は試してみてください。
解決済み!
2006/10/13(Fri) 11:43:36 編集(投稿者)

お絵かきツールみたいなことを考えているのでしょうか?
線の色等を考えなければ
XORで線を描画する方法があります。
もういちどXORで描画すると元に戻ります。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板