为什么更改图片框大小模式会删除绘制的图形?

时间:2014-10-15 13:55:00

标签: vb.net graphics picturebox

所以我目前在一个名为pbZoneImage的图片框上有这个工作代码:

        'draw rect
        Dim control As Control = CType(pbZoneImage, Control)
        Dim g As Graphics = Me.pbZoneImage.CreateGraphics()
        pbZoneImage.SizeMode = PictureBoxSizeMode.StretchImage
        If camRect1 <> Nothing Then g.DrawRectangle(Pens.Blue, camRect1)
        If camRect2 <> Nothing Then g.DrawRectangle(Pens.Coral, camRect2)
        If camRect3 <> Nothing Then g.DrawRectangle(Pens.Yellow, camRect3)

        'update
        pbZoneImage.Update()

关注我的是StretchImage。无论我把它放在代码中的哪个位置,它都会导致我绘制的矩形不显示。如果我将其删除,它们会完美显示(但不会以拉伸的图像格式显示)。

虽然我可以在没有被拉伸的情况下生活,但我好奇的问题是为什么这会移除盒子?我会理解,如果我在之后我画了矩形,甚至在我宣布控件之后。但是为什么在所有这一切之前它仍会影响它呢?

注意:我已经介入,它正在运行每一行而没有错误。

更新:为了澄清,此代码位于按钮点击事件中。我想在单击按钮时在图片框上绘制矩形。

更新 使用评论中其他人提到的东西,显然createGraphics()不是一个非常可靠的方法。相反,你应该在位图上绘制并显示它。这就是我最终做的事情,成功了!

        Dim imageFile As Image = pbZoneImage.Image

       'Show Rectangles on Picture box 
        Dim newGraphics As Graphics = Graphics.FromImage(imageFile)

        Dim redPen As New Pen(Brushes.Red, 5)
        Dim bluePen As New Pen(Brushes.Blue, 5)
        Dim yellowPen As New Pen(Brushes.Yellow, 5)

        'draw
        If camRect1 <> Nothing Then newGraphics.DrawRectangle(redPen, camRect1)
        If camRect2 <> Nothing Then newGraphics.DrawRectangle(bluePen, camRect2)
        If camRect3 <> Nothing Then newGraphics.DrawRectangle(yellowPen, camRect3)

        'show new drawn on image
        pbZoneImage.Image = imageFile

        'stretch image 
        pbZoneImage.SizeMode = PictureBoxSizeMode.StretchImage

0 个答案:

没有答案