如何在面板中保持图片框的位置

时间:2015-06-22 07:47:14

标签: vb.net zoom coordinates trackbar

我想保持在面板内的picturebox2的位置。在我的情况下,图像看起来像这样.. https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8SUu7ZXBJVXrhic-Xou9OsW4h7QDd8yH5xhYtV3DlnJ0Q1UVJiw(有一个地图/ picturebox1 /,颜色绿色定位器或指针是另一个picturebox / picturebox2 /)

是否可以在不丢失正确坐标的情况下放大和缩小图像?因为我想在地图(picturebox1)中保持定位器(picturebox2)的位置

到目前为止,我现在可以使用轨迹栏放大和缩小可滚动面板中的图像。但我唯一的问题是,picturebox2(picturebox1上方的另一个图像)需要移动其位置,因为picturebox1正在缩放。

Public ClassForm1
Private img original As Image
Private m_PanStartPoint As New Point
Private n_PanStartPoint As New Point

Private Sub Form1_Load(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
imgoriginal = Image.FromFile("C:\New Folder\picture1.jpg")
        PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
zoomSlider.Minimum = 1
zoomSlider.Maximum = 5
zoomSlider.SmallChange = 1
zoomSlider.LargeChange = 1
zoomSlider.UseWaitCursor = False
Me.DoubleBuffered = True
        Panel1.AutoScroll = True
        PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
        PictureBox1.Parent = PictureBox1
        PictureBox2.Parent = PictureBox1
        PictureBox1.BackColor = Color.Transparent
Dim mstream As NewSystem.IO.MemoryStream()
    PictureBox1.Image = Image.FromStream(mstream)
    PictureBox2.Location = NewSystem.Drawing.Point(100, 100)
End Sub

Public Function pictureboxzoom(ByValimgAsImage, ByVal size AsSize) AsImage
Dim bm As Bitmap = New Bitmap(img, Convert.ToInt32(img.Width * size.Width),     Convert.ToInt32(img.Height * size.Height))
Dim grap As Graphics = Graphics.FromImage(bm)
grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
Return bm
    End Function

Private Sub zoomSlider_Scroll(ByVal sender AsSystem.Object, ByVal e     AsSystem.EventArgs) Handles zoomSlider.Scroll
If zoomSlider.Value> 0 Then
            PictureBox1.Image = Nothing
            PictureBox1.Image = pictureboxzoom(imgoriginal, New     Size(zoomSlider.Value, zoomSlider.Value))
End If
End Sub

Private Sub PictureBox1_MouseDown(ByVal sender AsObject, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
m_PanStartPoint = NewPoint(e.X, e.Y)
End Sub

Private Sub PictureBox1_MouseMove(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then

Dim DeltaX As Integer = (m_PanStartPoint.X - e.X)
Dim DeltaY As Integer = (m_PanStartPoint.Y - e.Y)
Panel1.AutoScrollPosition = _
New Drawing.Point((DeltaX - Panel1.AutoScrollPosition.X), _
                    (DeltaY - Panel1.AutoScrollPosition.Y))
            Button1.Location = New System.Drawing.Point(0, 0)
End If
End Sub
End Class

0 个答案:

没有答案