我有一个包含图像的 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 的高度,在白色方块的左侧和右侧留下红色条。现在垂直调整窗体的大小,尽可能慢。您应该时不时地在底部看到一个红色边距。
宽度和水平调整大小也会发生同样的情况,显示右侧的边距。
正是由于这个小缺陷,我知道无法按照我一直这样做的方式计算缩放系数;结果只是一个近似值。如果在尝试后您仍然认为代码是相关的,那么我很乐意发布它。
感谢您抽出宝贵时间阅读和回复。