.net PictureBoxSizeMode.Zoom-什么';缩放因子是多少?

.net PictureBoxSizeMode.Zoom-什么';缩放因子是多少?,.net,user-interface,image,zooming,picturebox,.net,User Interface,Image,Zooming,Picturebox,我有一个PictureBox(其SizeMode属性设置为Zoom)包含一个图像,两者的大小可能不同 由于用户必须直接与图像交互,因此我需要能够将PictureBox单击坐标转换为图像坐标 到目前为止,我所做的是比较PictureBox的纵横比和图像的纵横比。例如,如果PictureBox相对于图像而言是“更宽的屏幕”(请参见屏幕截图),这意味着PictureBox会将图像拉伸到自己的高度并水平居中,在图像的左右两侧显示其背景色(在本例中为红色)。然后我假设图像的显示高度与PictureBox.

我有一个PictureBox(其SizeMode属性设置为Zoom)包含一个图像,两者的大小可能不同

由于用户必须直接与图像交互,因此我需要能够将PictureBox单击坐标转换为图像坐标

到目前为止,我所做的是比较PictureBox的纵横比和图像的纵横比。例如,如果PictureBox相对于图像而言是“更宽的屏幕”(请参见屏幕截图),这意味着PictureBox会将图像拉伸到自己的高度并水平居中,在图像的左右两侧显示其背景色(在本例中为红色)。然后我假设图像的显示高度与PictureBox.height相同,并从那里开始工作

不过有个问题。正如您在屏幕截图(绿色注释)中所看到的,白色图像被拉伸以适合(缩放)在红色图片框中,在底部留下一个小的空白

但并非所有PictureBox.Size/Image.Size组合都会出现这种情况。这让我相信一定有更好的方法来做到这一点


当然,我会的。我只需要修改代码来删除上下文依赖关系

但是底部的边距不是来自我的代码。它来自PictureBox本身。帮我个忙,试试下面的方法:

将PictureBox(PictureBox1)添加到窗体,将其停靠到窗体的所有四个侧面。代码应如下所示:

Public Class Form1

    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown

        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom

        PictureBox1.BackColor = Color.Red
        PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)

        g.FillRectangle(Brushes.White, 0, 0, PictureBox1.Image.Width, PictureBox1.Image.Height)

    End Sub

End Class
运行它并调整窗体大小,以便拉伸(缩放)图像以填充PictureBox的高度,在白色正方形的左侧和右侧留下红色条。现在垂直调整窗体大小,尽可能慢。你应该不时在底部看到一个红色的边距

同样的情况也发生在宽度和水平调整上,右边显示一个边距

正是因为这个小小的缺陷,我知道缩放因子无法按照我的方式计算;结果只是一个近似值。如果在尝试了这个之后,您仍然认为代码是相关的,那么我很乐意发布它


感谢您花时间阅读和回复。

我认为没有办法获得缩放因子。我猜你的数学可能有错误,因为底部的空白(可能你有一次性错误或类似的性质)


您可以发布一个完整的示例,显示您正在执行的计算吗?

屏幕截图的链接以404结尾