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

PictureBoxへJPEG画像を描画しその上に線を描画したい

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

こんにちは。hnkと申します。初めて投稿させて頂きます。

【解決したい問題】

PictureBoxへJPEG画像を描画し、その上に線を描画したいのですが、線が画像により消されてしまいうまく表示できません。
良い方法がありましたらご指導願います。

【解決するために何をしたか】

以下のようにPictureBoxのPaintイベントを使用したのですが、うまくいきませんでした。

Private _bmp As New Bitmap("C:\Blue hills.jpg")

Private Sub PictureBox1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PictureBox1.Paint
'Paintイベントハンドラで画像を表示する
e.Graphics.DrawImage(_bmp, 0, 0)

Dim gLine As Graphics = PictureBox1.CreateGraphics
Dim pPen As New Pen(Color.Yellow, 1)

gLine.DrawLine(pPen, 0, 250, 500, 250)

End Sub

宜しくお願い致します。
■No9795に返信(hnkさんの記事)
お疲れ様です。HSD所属のbettaです。

根本的な解決ではありませんが,
>Dim gLine As Graphics = PictureBox1.CreateGraphics
を使わず、eを使って線を描画してみてはどうでしょう。
e.Graphics.DrawLine(pPen, 0, 250, 500, 250)
bettaさん。ありがとうございます。

■No9813に返信(bettaさんの記事)
> ■No9795に返信(hnkさんの記事)
> お疲れ様です。HSD所属のbettaです。
>
> 根本的な解決ではありませんが,
> >Dim gLine As Graphics = PictureBox1.CreateGraphics
> を使わず、eを使って線を描画してみてはどうでしょう。
> e.Graphics.DrawLine(pPen, 0, 250, 500, 250)

ご指摘の通りに描画してみましたところ、解決致しました。

根本的解決ではないとのことですが、
eを使うと何がどのように変わるのでしょうか?
なにぶん素人なもので、質問ばかりで申し訳御座いません。
解決済み!
■No9816に返信(hnkさんの記事)
お疲れ様です。HSD所属のbettaです。

> > 根本的解決ではないとのことですが、
> eを使うと何がどのように変わるのでしょうか?
> なにぶん素人なもので、質問ばかりで申し訳御座いません。
うーん、何ででしょうね。
>Dim gLine As Graphics = PictureBox1.CreateGraphics
実は僕も、これだとなぜ描画されないのか、わかっていません。
ただ、僕が過去にやったのを見たら、
引数eを使っていたので、報告させていただきました。

というわけで、ナゼなのか僕も知りたいです。
お世話になります。hnkです。

ご返信ありがとうございます。
bettaさんもご存知ないのですか。
とりあえず問題点は解決したのですが、謎・・・ですね。

この度は本当にありがとうございました。

■No9823に返信(bettaさんの記事)
> ■No9816に返信(hnkさんの記事)
> お疲れ様です。HSD所属のbettaです。
>
>>> 根本的解決ではないとのことですが、
>>eを使うと何がどのように変わるのでしょうか?
>>なにぶん素人なもので、質問ばかりで申し訳御座いません。
> うーん、何ででしょうね。
> >Dim gLine As Graphics = PictureBox1.CreateGraphics
> 実は僕も、これだとなぜ描画されないのか、わかっていません。
> ただ、僕が過去にやったのを見たら、
> 引数eを使っていたので、報告させていただきました。
>
> というわけで、ナゼなのか僕も知りたいです。
>
EventArgsで渡されたデータは、イベント発生元に制御が戻った後に
何らかの処理が行われることは往々にしてあると思います。

仮に今回のe.Graphicsがイベント発生元に制御が戻った後に、
バッファをフラッシュするような処理が行われると仮定すると、
PictureBox1_Paint内においてCreateGraphicsメソッドで取得した異なるデバイスコンテキストを使用した描画処理は
無効になってしまうのではないでしょうか?

あくまで仮定ですが。^^;

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