Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取显示图像的(x,y)坐标?_C#_Wpf_Image_Events_User Interface - Fatal编程技术网

C# 如何获取显示图像的(x,y)坐标?

C# 如何获取显示图像的(x,y)坐标?,c#,wpf,image,events,user-interface,C#,Wpf,Image,Events,User Interface,目前,我正在使用WPFImage控件来显示图像。我要执行以下操作:在MouseUp、MouseDown或MouseMove事件中,我要获取光标下点的坐标,不是参照控件的左上角,而是参照显示位图的实际坐标,该位图可能已被重新缩放,或者可能具有与控件本身不同的纵横比。如果另一个控件提供了此功能,我同样很高兴听到这个消息。提前谢谢 编辑:我也想知道控件的坐标是否由于不同的纵横比而超出了图像的范围。您可以使用Visual类的各种方法来获取与特定控件相关的坐标,它将考虑应用于可视树的所有转换 另外,如果将

目前,我正在使用WPF
Image
控件来显示图像。我要执行以下操作:在
MouseUp
MouseDown
MouseMove
事件中,我要获取光标下点的坐标,不是参照控件的左上角,而是参照显示位图的实际坐标,该位图可能已被重新缩放,或者可能具有与控件本身不同的纵横比。如果另一个控件提供了此功能,我同样很高兴听到这个消息。提前谢谢

编辑:我也想知道控件的坐标是否由于不同的纵横比而超出了图像的范围。

您可以使用
Visual
类的各种方法来获取与特定控件相关的坐标,它将考虑应用于可视树的所有转换

另外,如果将
MouseUp
MouseDown
MouseMove
附加到
图像
控件本身,您应该已经从
鼠标按钮ventargs
中获得了正确的坐标,如果您在控件的视觉边界之外使用鼠标,则不会获得这些事件,因此,不需要额外的代码检查坐标是否超出边界

如果您的实际目标是找出鼠标触摸了位图图像的哪个实际像素(如您需要位图/像素编辑软件)事情变得更加困难,因为WPF使用与虚拟设备无关的像素,这些像素与屏幕上的像素或在
图像
控件中渲染的位图中的像素没有直接关系。
Image
控件根据位图文件本身的DPI设置和操作系统的DPI设置对位图图像进行内部缩放。

您可以使用
Visual
类的各种方法来获取与特定控件相关的坐标,它将考虑应用于可视树的所有转换

另外,如果将
MouseUp
MouseDown
MouseMove
附加到
图像
控件本身,您应该已经从
鼠标按钮ventargs
中获得了正确的坐标,如果您在控件的视觉边界之外使用鼠标,则不会获得这些事件,因此,不需要额外的代码检查坐标是否超出边界


如果您的实际目标是找出鼠标触摸了位图图像的哪个实际像素(如您需要位图/像素编辑软件)事情变得更加困难,因为WPF使用与虚拟设备无关的像素,这些像素与屏幕上的像素或在
图像
控件中渲染的位图中的像素没有直接关系。
Image
控件根据位图文件本身的DPI设置和操作系统的DPI设置对位图图像进行内部缩放。

您可以通过以下方式获得鼠标的坐标:

private void image1_MouseDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(image1); //position relative to the image
Point point2 = e.GetPosition(this);  //position relative to the window
}

希望这回答了您的一部分问题。

您可以通过以下方式获得鼠标的坐标:

private void image1_MouseDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(image1); //position relative to the image
Point point2 = e.GetPosition(this);  //position relative to the window
}

希望这回答了你问题的一部分。

我已经知道了这一点,但无论如何我都会认为这很有帮助。您让我可以访问相对于
图像
控件的坐标,而不是相对于控件中的图像,也不是位图的坐标。我已经知道了这一点,但我会将其标记为有用。你让我可以访问相对于
图像
控件的坐标,而不是它内部的图像,也不是位图的坐标。确切地说,最后一部分是我真正的目标。图像编辑软件正是我试图开发的,这是阻碍它发展的主要因素。如果有备用控件,则欢迎使用。另外,我不是指控件的边界,我是指其中显示的图像的边界。您确实应该寻找
图像
控件的替代品。在这种情况下,您可能需要自己编写一个。确切地说,最后一部分是我真正的目标。图像编辑软件正是我试图开发的,这是阻碍它发展的主要因素。如果有备用控件,则欢迎使用。另外,我不是指控件的边界,我是指其中显示的图像的边界。您确实应该寻找
图像
控件的替代品。在这种情况下,您可能需要自己编写一个。