我如何从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,如果我按右下角的鼠标
听起来好像你想要的是相对于原始图像像素的位置,而不管包含窗口的大小。
这应该有助于…
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,这将是相对于窗口的位置,所以你需要传入你的图像名称来获得正确的坐标。