C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

PictureBox1.Paintで一部のみ書き換える方法

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■93142 / inTopicNo.1)  PictureBox1.Paintで一部のみ書き換える方法
  
□投稿者/ たらこ (1回)-(2019/11/23(Sat) 21:54:58)

分類:[.NET 全般] 

VB.NETに関する質問です。


PictureBox1上に無数のラインや図形を描画したいのですが、
一部しか書き換える必要がないのに、
Invalidateごとに毎回全てのラインを描画し直すのは
効率が悪いと思います。

そのため、一部の図形は再描画せずに
それ以外の図形のみを再描画したいのですが
そのような方法はございますでしょうか?

再描画する必要のない図形が最前面にあった場合には
できないと思いますので、
最背面にある場合で良いです。

PictureBox1.Imageを使うしかないでしょうか?


引用返信 編集キー/
■93147 / inTopicNo.2)  Re[1]: PictureBox1.Paintで一部のみ書き換える方法
□投稿者/ KOZ (48回)-(2019/11/24(Sun) 12:20:11)
No93142 (たらこ さん) に返信
> そのため、一部の図形は再描画せずに
> それ以外の図形のみを再描画したいのですが
> そのような方法はございますでしょうか?

引数付きの Invalidate を使うと無効領域にする範囲が指定できます。
Paint イベントの PaintEventArgs.ClipRectangle に、描画範囲が渡されるので、その範囲のみ描画すれば良いです。

> PictureBox1.Imageを使うしかないでしょうか?
使ってどうするんでしょう?

引用返信 編集キー/
■93154 / inTopicNo.3)  Re[2]: PictureBox1.Paintで一部のみ書き換える方法
□投稿者/ たらこ (2回)-(2019/11/24(Sun) 22:18:06)
ありがとうございます。
こんな方法があるのですね。

ただ、再描画したい図形としたくない図形がオーバーラップしている場合には
どうすれば良いですか?

引用返信 編集キー/
■93155 / inTopicNo.4)  Re[3]: PictureBox1.Paintで一部のみ書き換える方法
□投稿者/ KOZ (49回)-(2019/11/24(Sun) 22:57:48)
2019/11/24(Sun) 23:15:08 編集(投稿者)
No93154 (たらこ さん) に返信
> ただ、再描画したい図形としたくない図形がオーバーラップしている場合には
> どうすれば良いですか?

描きたい部分から描きたくない部分を除いてリージョンを作成して

Invalidate(Region, Boolean)

を呼びます。

例)
var region1 = new Region(new Rectangle(0, 0, 100, 100)); // 描きたい領域
var region2 = new Region(new Rectangle(10, 10, 80, 80)); // 描きたくない領域
region1.Exclude(region2); // 描きたい領域から描きたくない領域を除く
pictureBox1.Invalidate(region1, false);


Paint イベントでは e.ClipRectangle に region1 の範囲が入ってくるので
描きたくない領域も含めて描画しますが、除いた部分は画面に反映されません。

リージョンはいろいろな形をとることができますので、調べてみてください。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ