首页 > 解决方案 > 使用缩放和偏移平移一个点(带有 AutoScroll 的面板)

问题描述

我创建了一个用户扫描图像的应用程序。

扫描的图像显示在 BackgroundImageTileMode = Stretch 的图片框中,此图片框放置在 AutoScroll=true 的 Panel 中。

在此处输入图像描述

单击图像,用户可以在图像上放置标签。我在运行时将它们添加到 MouseUp 位置,如下所示:

Private Sub picScannedImage_MouseUp(sender As Object, e As MouseEventArgs) Handles picScannedImage.MouseUp

    Dim nNewLabel As New Label
    With nNewLabel
        .AutoSize = True
        .Text = "aA"
        .Location = New Point(e.X, e.Y - .Height)
    End With

    Me.picScannedImage.Controls.Add(nNewLabel)

    nNewLabel.Location = New Point(e.X, e.Y - nNewLabel.Height)

    _ListOfAllLabels.Add(nNewLabel) 'so that I know where the user clicked / where he wants the labels to be
End Sub

用户稍后可以将扫描的图像导出为 PDF,我会将文本字段放在用户单击的位置。这样,PDF 将是可编辑的。

由于扫描的图像可能很大,我为用户提供了放大的选项。在放大时,我调整了图片框的大小。面板将检测图片框是否太大而无法完全显示,并显示滚动条。用户可以使用滚动条来滚动图像。

在此处输入图像描述

当用户放大时,我需要重新定位标签。此外,当用户现在点击某处时,我需要添加一个新标签。但是,我需要考虑到图像被缩放并且图像被移动(因为图像被滚动)。如何计算此缩放和滚动图像中标签的位置?

我还想问我如何方便地计算“真实”点击位置(=如果图像未缩放且未滚动,用户将点击的位置)。

谢谢!

标签: vb.netwinformsmath

解决方案


推荐阅读