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

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

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

Re[3]: ピクチャボックス内に指定した座標で画像を複数表示させる


(過去ログ 118 を表示中)

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

■69157 / inTopicNo.1)  ピクチャボックス内に指定した座標で画像を複数表示させる
  
□投稿者/ mosa (1回)-(2013/12/06(Fri) 17:17:21)

分類:[C#] 

はじめまして、VC#2010でピクチャボックス内に指定した座標で画像を複数表示したいと思っているのですが、
うまくいかず煮詰まってきたのでみなさんのお力をお借りしたく質問させていただきました。

自分の動作のイメージとしては、
あらかじめピクチャボックスに背景の白色画像を読込、そこにボタンを押すごとに異なる座標に画像が表示(上書き)されていき、
6回目になると表示されている全ての画像を削除するようにしたいです。
しかし、ボタンをひとつ押したときの一つ目の画像以外が表示されず、またボタンを6回押しても削除されず困っています。

プログラムとしては
Bitmap back_bmp = (Bitmap)System.Drawing.Image.FromFile("白色画像");
Bitmap result;
Bitmap backImage = new Bitmap(back_bmp);
Graphics g = Graphics.FromImage(backImage);
private void button_Click(object sender, EventArgs e){
counter++;

switch(counter){
case 1: result = (Bitmap)System.Drawing.Image.FromFile("ファイル1");
g.DrawImage(result, 440, 0, result.Width, result.Height);
break;
case 2:result = (Bitmap)System.Drawing.Image.FromFile("ファイル2");
g.DrawImage(result, 440, 0, result.Width, result.Height);
break;
--中略--
case 6:backImage = new Bitmap(back_bmp);//画像初期化
break;
}
pictureBox1.Image = backImage
if(counter == 6){counter = 0;}


修正すべき個所やソースコードの添削、あるいは参考となるページがありましたらお教えいただけないでしょうか?
よろしくお願い致します。
引用返信 編集キー/
■69159 / inTopicNo.2)  Re[1]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ しま (50回)-(2013/12/06(Fri) 18:00:21)
No69157 (mosa さん) に返信
> はじめまして、VC#2010でピクチャボックス内に指定した座標で画像を複数表示したいと思っているのですが、
> うまくいかず煮詰まってきたのでみなさんのお力をお借りしたく質問させていただきました。
>
煮詰まると行き詰まるとの違いはお分かりでしょうか??
「会議が煮詰まる」は十分に議論した結果、議題の結論が固まってきたことを指します


switch(counter){
case 1:
//...
break;
//...
case 6:
//...
break;
}
pictureBox1.Image = backImage;

このコードから分かるのは、switch 文の中で何をしようとも最後には
pictureBox1 に backImage が残ることになるのではないですか?

> 自分の動作のイメージとしては、
> あらかじめピクチャボックスに背景の白色画像を読込、そこにボタンを押すごとに異なる座標に画像が表示(上書き)されていき、
> 6回目になると表示されている全ての画像を削除するようにしたいです。
> しかし、ボタンをひとつ押したときの一つ目の画像以外が表示されず、またボタンを6回押しても削除されず困っています。
>

1)一つ目の画像とは背景の白色画像のことを指していますか?
2)ボタンを6回押しても削除されないとはどういう事を指していますか?
2-1)削除されたらどうなるべきなのでしょうか?
2-2)つまり、削除できたかどうかの判断基準は何ですか?
引用返信 編集キー/
■69161 / inTopicNo.3)  Re[2]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ mosa (3回)-(2013/12/06(Fri) 18:33:22)
No69159 (しま さん) に返信

>
> 1)一つ目の画像とは背景の白色画像のことを指していますか?
 いえ、counter=1のときに動作するswitch文のcase1でのファイル1の画像です

> 2)ボタンを6回押しても削除されないとはどういう事を指していますか?
 自分の考えではボタンを6回押すことでcounter=6となり、それによりswitch文でcase6に入り、
 back_bmpで指定された白色画像が読み込まれることで画像が初期化され、今まで描かれた画像らが
 削除されることを期待していました。
 ですが、初期化されず画像が残ったままの状態になっています。
 その状態のことを指しています

> 2-1)削除されたらどうなるべきなのでしょうか?
 白色画像が読み込まれ、今まで描かれた複数の画像が削除されることを期待しています

> 2-2)つまり、削除できたかどうかの判断基準は何ですか?
 複数の画像が描かれた状態から、画面上から全てなくなり、白色のみになったら削除できたと判断します

 
引用返信 編集キー/
■69163 / inTopicNo.4)  Re[3]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ しま (51回)-(2013/12/06(Fri) 18:59:59)
No69161 (mosa さん) に返信
> ■No69159 (しま さん) に返信
>
>>
>>1)一つ目の画像とは背景の白色画像のことを指していますか?
>  いえ、counter=1のときに動作するswitch文のcase1でのファイル1の画像です
>
>>2)ボタンを6回押しても削除されないとはどういう事を指していますか?
>  自分の考えではボタンを6回押すことでcounter=6となり、それによりswitch文でcase6に入り、
>  back_bmpで指定された白色画像が読み込まれることで画像が初期化され、今まで描かれた画像らが
>  削除されることを期待していました。
>  ですが、初期化されず画像が残ったままの状態になっています。
>  その状態のことを指しています
>
6回目にボタンを押して離した時(click)に switch 文で case 6 に入ることは確認しましたか?

counter == 6 の場合の処理が正しいことは確認できていますか?

それから、開発環境、動作環境について書いてくださいね。
--VS(VisualStudio)のバージョン、エディションと Windows のバージョン
及び、選んだ DotNetFramework のバージョン、アプリケーションの種類--
引用返信 編集キー/
■69164 / inTopicNo.5)  Re[1]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ 魔界の仮面弁士 (448回)-(2013/12/06(Fri) 20:03:29)
No69157 (mosa さん) に返信
> うまくいかず煮詰まってきたので
行き詰まる、ということで。
http://kotobank.jp/word/%E7%85%AE%E8%A9%B0%E3%82%8B


> 修正すべき個所やソースコードの添削
GDI+ オブジェクトの解放処理がゴッソリ抜け落ちています。


> あらかじめピクチャボックスに背景の白色画像を読込、そこにボタンを押すごとに異なる座標に画像が表示(上書き)されていき、
> 6回目になると表示されている全ての画像を削除するようにしたいです。
Paint イベントで描画する方式ではなく、描画したBitmapを割り当てる手法ですね。

だとすると、
 private Bitmap 背景白黒画像 = Graphics.FromImage(白黒画像のパス);
 private Bitmap 現在の画像 = new Bitmap(x, y);
のように用意しておき、
 if(回数 == 0)
 {
  現在の画像.Dispose();
  現在の画像 = 背景白黒画像.Clone();
 }
 var filePath = GetFilePath(回数);
 using (var g = Graphics.FromImage(現在の画像))
 using (var img = Image.FromFile(filePath))
 {
  g.DrawImage(img, …);
 }
 pictureBox1.Image = 現在の画像;
 回数++;
 if(回数 > 上限) 回数 = 0;
だとどうでしょう。机上コードなので未確認。
引用返信 編集キー/
■69166 / inTopicNo.6)  Re[1]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ Jitta (120回)-(2013/12/06(Fri) 22:21:43)
Jitta さんの Web サイト
No69157 (mosa さん) に返信

> switch(counter){
> case 1: result = (Bitmap)System.Drawing.Image.FromFile("ファイル1");
> g.DrawImage(result, 440, 0, result.Width, result.Height);
> break;
> case 2:result = (Bitmap)System.Drawing.Image.FromFile("ファイル2");
> g.DrawImage(result, 440, 0, result.Width, result.Height);

 同じところに描いているように見えるのは気のせい?
http://msdn.microsoft.com/ja-jp/library/dbsak4dc.aspx
第2、第3引数は位置で、1回目も2回目も (440, 0) の位置に描いているようだけど?
x = 440 * (count % 3)
y = 440 * (count / 3)
で、(440, 440) の大きさの絵を、横に3つ並べるように敷き詰めると思うよ。

引用返信 編集キー/
■69218 / inTopicNo.7)  Re[2]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ mosa (4回)-(2013/12/10(Tue) 10:08:47)

返信遅れて申し訳ありません。
 皆さんのご指摘部分を見直してみたら、うまくプログラムが動くようになりました
 ありがとうございます
引用返信 編集キー/
■69219 / inTopicNo.8)  Re[3]: ピクチャボックス内に指定した座標で画像を複数表示させる
□投稿者/ mosa (5回)-(2013/12/10(Tue) 10:10:37)

 解決済みにチェックするのを忘れてたので
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -