图片框中的绘图矩形坐标翻转?

时间:2014-10-14 18:10:57

标签: vb.net picturebox

所以我有一个带图像的图片框。我有坐标在图像上(从设备)绘制某些框(如在多个矩形中)。

Dim rectPoint_Start As Point = 
    New Point((newStartPoint_X * pbZoneImage.Width / resWidth),
               newStartPoint_Y * pbZoneImage.Height / resHeight)
Dim rectPoint_End As Point = 
    New Point((newEndPoint_X * pbZoneImage.Width / resWidth),
               newEndPoint_Y * pbZoneImage.Height / resHeight)
Dim rectangleHeight As Integer = (rectPoint_End.Y - rectPoint_Start.Y)
Dim rectangleWidth As Integer = (rectPoint_End.X - rectPoint_Start.X)

'localize
camRect1 = New Rectangle(rectPoint_Start.X, rectPoint_Start.Y, _
rectangleWidth, rectangleHeight)
If camRect1 <> Nothing Then g.DrawRectangle(Pens.Blue, camRect1)

矩形坐标以分辨率缩放,所以你看到我将它改为pbZoneImage图片框的相对点值。我遇到的问题是我正在接收的坐标(来自设备)假设(0,0)点在左下角,PB从左上角开始绘制这些框。有没有办法改变g.drawRectangle()中绘制起点的方向?或另一种方法。

到目前为止,我所尝试的是在(pbzoneImage.bottom) - ((newEndPoint_X * pbZoneImage.Width ....)rectPoint_End点添加rectPoint_Start。它似乎不起作用,并给我负面价值。

更新

所以这就是我最终要做的修复它。我最终根据我收到的一些答案绘制了一个坐标系并做了一些旧学校代数。 (提醒一下,pbZoneImage是一个图片框,起点x和y以及端点x和y是来自设备的值)

    Dim rectangleHeight As Integer = Math.Floor((newEndPoint_Y - newStartPoint_Y) * pbZoneImage.Height)
    Dim rectangleWidth As Integer = Math.Floor((newEndPoint_X - newStartPoint_X) * pbZoneImage.Height)

    'flip rectangle 

    Dim rectPoint_Start As New Point((newStartPoint_X * pbZoneImage.Width), _
             pbZoneImage.Height - (newStartPoint_Y * pbZoneImage.Height) - rectangleHeight)

    Dim rectPoint_End As Point = New Point((newEndPoint_X * pbZoneImage.Width), _
             pbZoneImage.Height - (newEndPoint_Y * pbZoneImage.Height) - rectangleHeight)

       'localize
        camRect1 = New Rectangle(rectPoint_Start.X, rectPoint_Start.Y, _
             rectangleWidth, rectangleHeight)

2 个答案:

答案 0 :(得分:1)

从设备收到newStartPoint_YnewEndPoint_Y值后,请执行以下操作:

    newStartPoint_Y = resHeight - newStartPoint_Y
    newEndPoint_Y = resHeight - newEndPoint_Y

假设您的设备为您提供基于零的参考的坐标(其中左下角的点具有坐标(0,0),该坐标适合于从零开始的坐标。 PictureBox)的左上角 如果我理解的话,newStartPoint_X / Y和newEndPoint_X / Y是直接来自设备的坐标?

我建议您习惯使用CInt()时使用Point整数X和Y值,或更好:CSng()使用PointF,因为无论如何缩放坐标

答案 1 :(得分:0)

我相信你忘了也调整矩形高度。如果矩形原点是左下角并且其位置根据图像左下原点映射到已调整大小的图像坐标系,则必须调整已调整大小的图像高度和映射的矩形高度。在纸上画出来以使关系正确。