- - PR -
bmp画像の表示で
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-06 11:03
こんにちは、ボビンと申します。
bmp画像を切り取りたく、Graphicsオブジェクトについて勉強しています。 bmpをPictureBox1に表示させるコードを二通り試しているのですが、 表示される方法と表示されない方法があります。 表示されない方法も動きそうではあるのですが、 は何が悪いのかわからず困っています。 よろしければご指摘いただけると助かります。
環境はwinxp、VB2005 SP1です。 よろしくお願いします。 | ||||
|
投稿日時: 2009-03-06 12:18
こんにちは
g.Dispose() が原因だと思われます。 せっかく描画したデータが、Disposeで消されてしまっているのだと思います。 | ||||
|
投稿日時: 2009-03-06 12:27
こんにちは。
ん? 単純にForm.Loadイベントなんかで記述しているからじゃないですか? 参照元記事にあるように、 描画するのは基本的にPaintイベントで行いましょう。 | ||||
|
投稿日時: 2009-03-06 13:10
セラフさん、お返事ありがとうございます。
'g.Dispose() 試してみたのですが、残念ながら表示されません。。 Tdnr_Symさん、お返事ありがとうございます。 Paintイベントによる描画はできるのですが、 参照元記事では、 「Paintイベントによる方法が使えない場合は、こちらの方法となります。」 とありまして、それがこのコードです。
特に間違いはなさそうですので、表示できない原因が知りたくて 投稿しました。 イベントはおっしゃる通りPaintではなくフォームロードでやっております。 | ||||
|
投稿日時: 2009-03-06 13:17
たとえば Button.Click イベントなんかでやってみてください。 百聞は一見に(ry _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2009-03-06 13:20
あ、じゃんぬねっとさん、失礼しました。
かぶってしまいました。ありがとうございます。 はい、ボタンクリックイベントで無事に表示できました。 理由はご存知でしょうか? [ メッセージ編集済み 編集者: ボビン 編集日時 2009-03-06 13:26 ] | ||||
|
投稿日時: 2009-03-06 13:29
じゃんぬねっとさんのおっしゃるようにして、
それぞれで描いたあとに、他のウィンドウを手前に 持ってきて隠してから、再度該当ウィンドウを手前に 表示してみてください。 その後で、下記を理解しようとしてみてください。 Load 処理の後で、画面の描画( Paint イベント )が行われます。 Windows の Window が裏に隠れた後に、表に出てきた時の処理は、 隠れた時に保存された画像が表示されるのでなく、 アプリケーションで再描画( Paint イベント )が行われます。 Paint イベント以外で描いたものは、Paint イベントで消えてしまいます。 | ||||
|
投稿日時: 2009-03-06 13:31
Button.Click イベントで PictureBox に画像を表示させた後、PictureBox の画像が半分隠れるまでデスクトップの領域外にウィンドウを移動させてみてください。 その後、ウィンドウをデスクトップの領域内に戻してみてください。 再描画はされますか? 「Load イベントだから」 というよりは 「再描画されないから」 と考えてみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |