C# 如何从MouseEvent获取图像的X和Y点?

C# 如何从MouseEvent获取图像的X和Y点?,c#,wpf,image,events,mouse,C#,Wpf,Image,Events,Mouse,我有一个图像编辑程序,需要图像的X和Y坐标。目前,我使用MouseLeftButtonDown和MouseRightButtonDown事件 <Image Name="Image" MouseLeftButtonDown="MouseLeftButtonDown_Click" MouseRightButtonDown="MouseRightButtonDown_Click"></Image> 我认为问题在于我在e.GetPosition中添加了null作为参数。但我不知

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

<Image Name="Image" MouseLeftButtonDown="MouseLeftButtonDown_Click" MouseRightButtonDown="MouseRightButtonDown_Click"></Image>
我认为问题在于我在
e.GetPosition
中添加了
null
作为参数。但我不知道我要补充什么否则

例如,我打开一个1920x1080图像,如果我 在右下角按下鼠标


请尝试传递您的
图像,而不是
null

System.Windows.Point p=e.GetPosition(图像)

例如:

你的形象:

<Image x:Name="imgYouImage" /> 

请尝试传递您的
图像,而不是
null

System.Windows.Point p=e.GetPosition(图像)

例如:

你的形象:

<Image x:Name="imgYouImage" /> 

请尝试传递您的
图像,而不是
null

System.Windows.Point p=e.GetPosition(图像)

例如:

你的形象:

<Image x:Name="imgYouImage" /> 

请尝试传递您的
图像,而不是
null

System.Windows.Point p=e.GetPosition(图像)

例如:

你的形象:

<Image x:Name="imgYouImage" /> 
尝试:

按照西蒙·马丁的建议,我将解释一下

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

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

试试:

按照西蒙·马丁的建议,我将解释一下

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

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

试试:

按照西蒙·马丁的建议,我将解释一下

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

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

试试:

按照西蒙·马丁的建议,我将解释一下

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


请参阅我的另一个答案以获得更好的解决方案。

听起来好像您想要原始图像像素的位置,无论包含窗口的大小如何

这应该有助于

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);
}
我将您的图像重命名为“图像”,以解决图像名称和类名之间的冲突。按如下方式更新您的XAML:

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


@Gerret:请给出几个错误坐标的例子,以及您期望的坐标是什么?

听起来好像您想要相对于原始图像像素的位置,无论包含的窗口大小如何

这应该有助于

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);
}
我将您的图像重命名为“图像”,以解决图像名称和类名之间的冲突。按如下方式更新您的XAML:

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


@Gerret:请给出几个错误坐标的例子,以及您期望的坐标是什么?

听起来好像您想要相对于原始图像像素的位置,无论包含的窗口大小如何

这应该有助于

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);
}
我将您的图像重命名为“图像”,以解决图像名称和类名之间的冲突。按如下方式更新您的XAML:

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


@Gerret:请给出几个错误坐标的例子,以及您期望的坐标是什么?

听起来好像您想要相对于原始图像像素的位置,无论包含的窗口大小如何

这应该有助于

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);
}
我将您的图像重命名为“图像”,以解决图像名称和类名之间的冲突。按如下方式更新您的XAML:

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


@Gerret:请给出几个错误坐标的示例,以及您期望的坐标是什么?

我不知道该怎么做,我必须添加一个System.Windows.IIInputElement参数。您需要传递图像名称,而不是null。因此,您指的是类图像,或者您指的是带有名称图像的我的图像。如果我使用类映像,它会更好,但仍然不正确。如果我在左上角按下,我会得到右坐标,但如果我在右下角按下,我会得到一个太小的坐标…这不起作用!我也不会投。我如何添加这个论点。。。你能进一步解释一下吗?然后在代码中使用点p=e.GetPosition(imgYouImage);我不知道该怎么做,我必须添加System.Windows.IIInputElement参数。您需要传递图像名称而不是null。因此,您指的是类图像,或者是带有名称图像的我的图像。如果我使用类映像,它会更好,但仍然不正确。如果我在左上角按下,我会得到右坐标,但如果我在右下角按下,我会得到一个太小的坐标…这不起作用!我也不会投。我如何添加这个论点。。。你能进一步解释一下吗?然后在代码中使用点p=e.GetPosition(imgYouImage);我不知道该怎么做,我必须添加System.Windows.IIInputElement参数。您需要传递图像名称而不是null。因此,您指的是类图像,或者是带有名称图像的我的图像。如果我使用类映像,它会更好,但仍然不正确。如果我在左上角按下,我得到了右坐标,但是如果我在右下角按下,我得到了右坐标