PictureBoxSizeMode.Zoom - 什么是缩放系数?

时间:2009-01-07 11:18:50

标签: .net user-interface image zoom picturebox

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

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

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

但是有一个问题。正如您在屏幕截图中看到的那样(绿色注释我的),在红色PictureBox内拉伸以适合(缩放)的白色图像在底部留下一个小边距。

screenie http://img132.imageshack.us/img132/3541/bordernl6.th.png Click for full-size.

但是,对于所有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

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

同样的事情发生在宽度和水平调整大小,显示右边的边距。

正是由于这种小的不完美,我才知道变焦系数无法按照我的方式计算;结果只是一个近似值。如果在尝试此操作后仍然认为代码是相关的,那么我很乐意发布它。

感谢您抽出宝贵时间阅读并回复。

1 个答案:

答案 0 :(得分:0)

我认为没有办法获得缩放系数。我猜你的数学可能有误,因为底部的边距(也许你有一次性错误或类似的东西)。

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