Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load pb1 = PictureBox1 bmp1 = New Bitmap(pb1.Width, pb1.Height) pb1.Image = bmp1 End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Dim ofd As New OpenFileDialog Dim g As Graphics = pb1.CreateGraphics()
'ダイアログのフィルター ofd.Filter = "jpgファイル(*.jpg)|*.jpg"
'ファイル選択 If ofd.ShowDialog() = DialogResult.OK Then bmp1 = New Bitmap(ofd.FileName) On Error GoTo ErrHandler End If
これはpb1.CreateGraphics()で作成したGraphicsに 描画しているためです。これはPictureBoxのImageとは違います。 従って、MenuItem2_Clickイベント一回のみで描画されているため 他のWindowなどが被ると消えてしまいます。 まずはImageに描画するために Dim g As Graphics = Graphics.FromImage(pb1.Image) のようにして、g.Dispose()の後にでもpb1.Invalidate()を呼び出してください。
分類:[.NET]
いつもプログラム作成時に参考にさせてもらっています。
画像処理のプログラムを作成中ですが、次のことで行き詰まっています。
オープンファイルダイアログを表示してファイルを選択後、画像を表示しますが、画像が表示された後、オープンファイルダイアログの部分がグレーで残ってしまい、画像が表示されません。
プログラムをロードして、1回目でダイアログがプログラムエリアに収まっていれば、問題なく表示されるが、2回目以降は跡が残ってしまいます。1回目でも、ダイアログがプログラムエリアから離れると、跡が残ってしまいます。
実質的には、再度画像を表示するようにすれば問題は無いのですが、気持ちがあまり良くありません。
何が問題なのでしょうか。よろしくお願いいたします。
'モジュール変数
Dim pb1 As PictureBox
Dim bmp1 As Bitmap
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
pb1 = PictureBox1
bmp1 = New Bitmap(pb1.Width, pb1.Height)
pb1.Image = bmp1
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Dim ofd As New OpenFileDialog
Dim g As Graphics = pb1.CreateGraphics()
'ダイアログのフィルター
ofd.Filter = "jpgファイル(*.jpg)|*.jpg"
'ファイル選択
If ofd.ShowDialog() = DialogResult.OK Then
bmp1 = New Bitmap(ofd.FileName)
On Error GoTo ErrHandler
End If
'高品質3次補間で640×480ピクセルで表示
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bmp1, 0, 0, 640, 480)
'グラフィックオブジェクトの破棄
g.Dispose()
ErrHandler:
End Sub
End Class
以上、よろしくお願いいたします。