2012-11-19 124 views
1

目前,我正在使用WPF Image控件来显示图像。我想要执行以下操作:在MouseUpMouseDownMouseMove事件中,我想获取光标下的点的坐标,而不是参考控件的左上角,但是关于实际的坐标所显示的位图可能已被重新缩放,或者可能具有与控件本身不同的宽高比。如果一个备用控件提供了这个功能,我同样乐意听到它。提前致谢。如何获取显示图像的(x,y)坐标?

编辑:我也想这样可能知道它,如果控制的坐标超出图像的范围,由于不同的纵横比。

回答

3

您可以使用Visual类的各种TransformTo*方法获取与相关控件相关的坐标,并将所有应用于视觉树的转换考虑在内。

此外,如果附加MouseUpMouseDownMouseMoveImage控制本身,你应该已经从MouseButtonEventArgs得到正确的坐标,如果您使用鼠标控制的视觉范围之外,你不会得到这些事件,所以你不需要额外的代码检查坐标超出界限。

如果您实际目标是找出你的位图图像的acutal像素已经通过鼠标触摸(正如你所需要的位图/像素编辑软件)事情变得更难,因为WPF使用虚拟设备indendent不直接与屏幕上的像素相关的像素或位图中已在Image控件中呈现的像素。 Image控件内部根据位图文件本身的DPI设置和基于操作系统的DPI设置来缩放位图图像。

+0

最后一部分是我确切的目标。一个图像编辑软件正是我想要开发的东西,而这正是它阻止它的一个主要部分。如果有任何替代控制,将受到欢迎。另外,我并不是指控件的边界,我的意思是显示图像的边界。 –

+0

在这种情况下,您肯定应该寻找'Image'控件的替代方法,您可能需要自己编写一个。 – bitbonk

3

您可以通过这种方式获得鼠标的坐标:

private void image1_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
Point point = e.GetPosition(image1); //position relative to the image 
Point point2 = e.GetPosition(this); //position relative to the window 
} 

希望这回答了你的问题的一部分。

+0

我已经知道这一点,但我会将其标记为有用。你让我访问相对于'Image'控件的坐标,而不是真正相对于它内部的图像,而不是真正的位图坐标。 –