所以我目前在一个名为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