我是如何从MouseEvent获取图像的X和Y点的?

时间:2014-05-15 06:18:42

标签: c# wpf image events mouse

我有一个图像编辑程序,需要图像的X和Y坐标。目前我使用MouseLeftButtonDown和MouseRightButtonDown事件。

<Image Name="Image" MouseLeftButtonDown="MouseLeftButtonDown_Click" MouseRightButtonDown="MouseRightButtonDown_Click"></Image>

我遇到的问题是我在WPF表格中没有找到合适的位置。意思是,如果我拖动窗口越小,坐标就会改变。

我的方法如下:

private void MouseLeftButtonDown_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    System.Windows.Point p = e.GetPosition(null);
    MessageBox.Show(p.X.ToString());
}

我认为问题在于我在null中添加e.GetPosition作为参数。但我不知道我必须在这里添加什么......否则......

  

例如,我打开1920x1080的图像,如果我,我真的想要1920和1080   在右边的僵局角落按下鼠标。

3 个答案:

答案 0 :(得分:2)

听起来好像你想要相对于原始图像像素的位置,无论包含窗口的大小是多少。

这应该有帮助...

private void MouseLeftButtonDown_Click(object sender, MouseButtonEventArgs e)
{
    System.Windows.Point p = e.GetPosition(image);
    double pixelWidth = image.Source.Width;
    double pixelHeight = image.Source.Height;
    double x = pixelWidth * p.X / image.ActualWidth;
    double y = pixelHeight * p.Y / image.ActualHeight;
    MessageBox.Show(x + ", " + y);
}

我将您的图片重命名为“image”以解决图片名称和类名之间的冲突。按如下方式更新您的XAML:

<Image Name="image" MouseLeftButtonDown="MouseLeftButtonDown_Click" MouseRightButtonDown="MouseRightButtonDown_Click"></Image>

pixelWidth和pixelHeight是源图像的原始宽度和高度。 x和y根据原始像素宽度/高度与屏幕上图像的实际显示宽度/高度之间的比率计算。

要在弹出消息中显示整个像素,请改为使用:

MessageBox.Show((int)x + ", " + (int)y);

@Gerret:请你举几个错误坐标的例子,以及你对它们的期望是什么?

答案 1 :(得分:1)

代替null尝试传递Image

System.Windows.Point p = e.GetPosition(Image);

例如:

你的形象:

<Image x:Name="imgYouImage" /> 

在您的代码中使用:

Point p = e.GetPosition(imgYouImage);

答案 2 :(得分:0)

尝试:

System.Windows.Point p = e.GetPosition(Image);

根据Simon Martin的建议,我会解释一下......

GetPosition()返回鼠标单击相对于作为参数传入的元素位置的位置。如果传入null,则它将相对于窗口的位置,因此您需要传入图像名称以获得正确的坐标。

请参阅我的其他答案以获得更好的解决方案。