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

パネルのちらつき

分類:[.NET]

分割ウィンドウにして
パネルに描画処理をしているのですがちらついてしまいます
ちらつきしないオフスクリーンを使ったのですがちらついてしまいます
サンプルです

Init_Image()メソッドはファイルを開くダイアログから画像データを読み込んだら
実行されるようにしています
そのあと再描画してその画像ファイルを表示するようにしているのですが
サイズを変更したりその部分を隠したりして元に戻すとちらついてしまいます
また画像をダイアログから読み込んで表示させようとしているときもちらつきます

//描画処理する前の処理
void Init_Image()
{
//画像ファイルの読み込み
bitmap = Image.FromFile(Image_filename);
//オフスクリーン作成
offImage = new Bitmap(300,300);
//オフスクリーンに対して描画処理をするようにする
off = Graphics.FromImage(offImage);
}


//左側のパネルに描画処理
void Panel2_Paint(object sender, PaintEventArgs e)
{
//表に表示するために必要
Graphics g = e.Graphics;
//画像データが入っていたら
if (bitmap != null)
{
//切り取ってタイルのように描画処理
for (int y = 0; y < mapy_size; y++)
{
for (int x = 0; x < mapx_size; x++)
{
int offsetx = (x * tipx_size);
int offsety = (y * tipy_size);
Rectangle dest = new Rectangle(offsetx, offsety, tipx_size, tipy_size);
Rectangle src = new Rectangle(0,0,tipx_size,tipy_size);
//裏描画をする
off.DrawImage(bitmap, dest, src, GraphicsUnit.Pixel);
}
}
//すべて表に表示
g.DrawImage(offImage, 0, 0);
}
g.Dispose();
}
ダブルバッファリングしてみてはどうでしょうか?
http://www.atmarkit.co.jp/fdotnet/dotnettips/197doublebuf/doublebuf.html
2006/06/01(Thu) 16:26:33 編集(投稿者)

上のサンプルはダブルバッファリングをやっていますが
だめでした。上のサンプルではオフスクリーンを作成しそこで裏描画して
表にすべて表示させるという仕様なんですがだめでした
教えてもらったサイトの方法でもやってみましたがやはりちらつきます
ちなみにパネルに対してダブルバッファリングをやるにはどうしたらいいでしょうかサイトのはどうもパネルではなくクライアント領域に対してのダブルバッファリングだとおもうのですがどうなんでしょうか?
そのサイトを見て書いたサンプルです


//描画処理する前の処理
void Init_Image()
{
//画像ファイルの読み込み
bitmap = Image.FromFile(Image_filename);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}


//左側のパネルに描画処理
void Panel2_Paint(object sender, PaintEventArgs e)
{
//画像データが入っていたら
if (bitmap != null)
{
//描画処理
Graphics g = e.Graphics;
//切り取ってタイルのように描画処理
for (int y = 0; y < mapy_size; y++)
{
for (int x = 0; x < mapx_size; x++)
{
int offsetx = (x * tipx_size);
int offsety = (y * tipy_size);
Rectangle dest = new Rectangle(offsetx, offsety, tipx_size, tipy_size);
Rectangle src = new Rectangle(0, 0, tipx_size, tipy_size);
//表示する
g.DrawImage(bitmap, dest, src, GraphicsUnit.Pixel);
}
}
//破棄する
g.Dispose();
}
}
  • 題名: 【報告】この投稿はマルチポストです
  • 著者: (報告)
  • 日時: 2006/06/01 17:12:20
  • ID: 16096
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
この投稿はマルチポストです。

●マルチポストされている場所
http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=4083

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html

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