我有一个图像编辑程序,需要图像的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 在右边的僵局角落按下鼠标。
答案 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,则它将相对于窗口的位置,因此您需要传入图像名称以获得正确的坐标。
请参阅我的其他答案以获得更好的解决方案。