我目前正在开发一个应用程序,我在其中使用视频流事件处理程序在VB.Net中的Forms图片框中生成相机图像(是的,它听起来像一个kinect应用程序......它是......)< / p>
我可以使用以下代码在我的位图图像(camer stream)上创建一个红色矩形:
Dim g As Graphics = Graphics.FromImage(kinectVideoBitMap)
Dim rect As Rectangle = New Rectangle
rect.Width = 6.4
rect.Height = 480
g.DrawRectangle(Pens.Red, rect)
End If
直接前进。
但是,我真正想要的是能够创建多个矩形并排跨越我的图片框宽度“6.4”(&lt; - 像素我认为??)
我尝试使用“For Loop”创建这些矩形,然后为每个矩形设置一个新位置,如下所示:
Dim g As Graphics = Graphics.FromImage(kinectVideoBitMap)
Dim i As Integer
For i = 0 To 100
Dim rect As Rectangle = New Rectangle
rect.Width = 6.4
rect.Height = 480
rect.Location = New System.Drawing.Point(*{not sure how to measure here}*, *{or here either}*)
g.DrawRectangle(Pens.Red, rect)
Next
任何帮助都会很棒。
我的计划是使用这些矩形来帮助我选择要通过麦克风阵列声源位置选择的骨架。因此矩形宽度为“6.4”
640是视频流的宽度分辨率,我将其除以麦克风阵列中“-50到50”的度量“100”。
但是,最后我只需要帮助矩形。
编辑:这里有一些我想出来的东西。我现在非常接近答案:
Dim g As Graphics = Graphics.FromImage(kinectVideoBitMap)
Dim i As Integer = 1
Dim newLocationX As Integer = 0
Do Until i = 100
Dim rect(i) As Rectangle
Rect(i) = New Rectangle
Rect(i).Width = 6
Rect(i).Height = 480
Rect(i).Location = New System.Drawing.Point(video.Left + newLocationX, Rect(i).Location.Y)
g.DrawRectangle(Pens.Red, Rect(i))
newLocationX = newLocationX + 6
i += 1
Loop
End If
最后编辑:我的数学错误。以下是我如何使用它:
图像宽度的分辨率为640 我需要用100个矩形填充宽度。
数学是640/100 = 6.4&lt; - 矩形的宽度
我认为我必须重复For循环100次以获得100个矩形。这不是真的。重复For循环图片框的宽度:640次!
将矩形放置在宽度为6.4的图片框中的事实将在宽度为640的图片框中自动创建100个矩形。
这是有效的代码:
Dim g As Graphics = Graphics.FromImage(kinectVideoBitMap)
Dim i As Integer = 0
Dim newLocationX As Integer = 0
Do Until i = 640
Dim rect(i) As Rectangle
rect(i) = New Rectangle
rect(i).Width = 6.4
rect(i).Height = 480
rect(i).Location = New System.Drawing.Point(video.Right - newLocationX, rect(i).Location.Y)
g.DrawRectangle(Pens.Red, rect(i))
newLocationX = newLocationX + 6.4
i += 1
Loop