我如何从MouseEvent获得图像的X和Y点

本文关键字:图像 MouseEvent | 更新日期: 2023-09-27 18:03:22

我有一个图像编辑程序,需要图像的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());
}

我认为问题是我在e.GetPosition中添加了null作为参数。但是我不知道我要在这里添加什么,否则…

例如,我打开一个1920x1080的图像,我真的想要1920和1080,如果我按右下角的鼠标

我如何从MouseEvent获得图像的X和Y点

听起来好像你想要的是相对于原始图像像素的位置,而不管包含窗口的大小。

这应该有助于…

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:你能不能举几个错误坐标的例子,以及你期望它们是什么?

代替null尝试传递Image

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

例如:

你的形象:

<Image x:Name="imgYouImage" /> 

在你的代码中使用:

Point p = e.GetPosition(imgYouImage);

尝试:

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

根据Simon Martin的建议,我将解释这个…

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