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

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

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

Re[1]: 【c#】画面を切り替えたら描画した画像が消えます


(過去ログ 131 を表示中)

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

■77720 / inTopicNo.1)  【c#】画面を切り替えたら描画した画像が消えます
  
□投稿者/ めもめ (1回)-(2015/11/19(Thu) 00:20:15)

分類:[C#] 

最初に画像をpictureboxに表示しましたが、最小化・他のウインドを重ねて戻したら消えます。
コードではどこを変えたらいいでしょうか?

	public partial class Form1: Form
	{

		private Bitmap[] m_bmp = null;
		

		public Form1() {
			InitializeComponent();
		}

		private void Set() {
			this.m_bmp = new Bitmap[System.IO.Directory.GetFiles( System.IO.Directory.GetCurrentDirectory(), "*.jpg*" ).Length];

			for( int i = 0; i < System.IO.Directory.GetFiles( System.IO.Directory.GetCurrentDirectory(), "*.jpg*" ).Length; i++ ) {
				this.m_bmp[i] = new Bitmap( System.IO.Directory.GetCurrentDirectory() + "\\" + i + ".jpg" );
			}
			this.Image();
		}

		private void Image() {
			Graphics gr;
			Bitmap bmp;
			for( int i = 0; i < System.IO.Directory.GetFiles( System.IO.Directory.GetCurrentDirectory(), "*.jpg*" ).Length; i++ ) {
				bmp = new Bitmap( this.m_bmp[i], this.pictureBox1.Width, this.pictureBox1.Height / 2 );
				gr = Graphics.FromHwnd( this.pictureBox1.Handle );
				gr.DrawImage( bmp, new Point( 0, ( this.pictureBox1.Height / System.IO.Directory.GetFiles( System.IO.Directory.GetCurrentDirectory(), "*.jpg*" ).Length ) * i ) );
			}
		}

		private void button1_Click( object sender, EventArgs e ) {
			this.Set();
		}
	}

引用返信 編集キー/
■77721 / inTopicNo.2)  Re[1]: 【c#】画面を切り替えたら描画した画像が消えます
□投稿者/ 魔界の仮面弁士 (562回)-(2015/11/19(Thu) 02:55:41)
No77720 (めもめ さん) に返信
> 最初に画像をpictureboxに表示しましたが、最小化・他のウインドを重ねて戻したら消えます。
そういうものです。
そして、そのたびに描きなおすことで、継続的に表示されているように見せることができます。


> コードではどこを変えたらいいでしょうか?
一般的には
> gr = Graphics.FromHwnd( this.pictureBox1.Handle );
とするのではなく、以下のいずれかを利用するのが良いでしょう。

(案1)描画処理を、pictureBox1 の Paint イベント内で、e.Graphics に対して行うようにする。
(案2)pictureBox1 の Image プロパティまたは BackgroundImage プロパティに画像をセットする。

http://dobon.net/vb/dotnet/graphics/


それから、Grapchis や Bitmap 等は IDisposable なオブジェクトなので、
生成した後は、使い終わった後で Dispose せねばなりません。
現状のコードだと、
> bmp = new Bitmap( this.m_bmp[i], this.pictureBox1.Width, this.pictureBox1.Height / 2 );
> gr = Graphics.FromHwnd( this.pictureBox1.Handle );
として Bitmap や Graphics を生成していますが、いずれも Dispose が漏れていますね。
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -