1

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

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

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

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

screenie http://img132.imageshack.us/img132/3541/bordernl6.th.png 点击查看完整尺寸。

不过,并非所有 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 的高度,在白色方块的左侧和右侧留下红色条。现在垂直调整窗体的大小,尽可能慢。您应该时不时地在底部看到一个红色边距。

宽度和水平调整大小也会发生同样的情况,显示右侧的边距。

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

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

4

1 回答 1

0

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

您能否发布一个完整的示例来显示您正在执行的计算?

于 2009-01-07T21:08:23.467 回答