我有一个包含图像的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的高度,在白色方块的左侧和右侧留下红色条。现在垂直调整表格,尽可能慢。你应该不时在底部看到一个红色边缘。
同样的事情发生在宽度和水平调整大小,显示右边的边距。
正是由于这种小的不完美,我才知道变焦系数无法按照我的方式计算;结果只是一个近似值。如果在尝试此操作后仍然认为代码是相关的,那么我很乐意发布它。
感谢您抽出宝贵时间阅读并回复。
答案 0 :(得分:0)
我认为没有办法获得缩放系数。我猜你的数学可能有误,因为底部的边距(也许你有一次性错误或类似的东西)。
您是否可以发布一个显示您正在执行的计算的完整示例?