C# 如何获取显示图像的(x,y)坐标?
目前,我正在使用WPFC# 如何获取显示图像的(x,y)坐标?,c#,wpf,image,events,user-interface,C#,Wpf,Image,Events,User Interface,目前,我正在使用WPFImage控件来显示图像。我要执行以下操作:在MouseUp、MouseDown或MouseMove事件中,我要获取光标下点的坐标,不是参照控件的左上角,而是参照显示位图的实际坐标,该位图可能已被重新缩放,或者可能具有与控件本身不同的纵横比。如果另一个控件提供了此功能,我同样很高兴听到这个消息。提前谢谢 编辑:我也想知道控件的坐标是否由于不同的纵横比而超出了图像的范围。您可以使用Visual类的各种方法来获取与特定控件相关的坐标,它将考虑应用于可视树的所有转换 另外,如果将
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
}
希望这回答了你问题的一部分。我已经知道了这一点,但无论如何我都会认为这很有帮助。您让我可以访问相对于
图像
控件的坐标,而不是相对于控件中的图像,也不是位图的坐标。我已经知道了这一点,但我会将其标记为有用。你让我可以访问相对于图像
控件的坐标,而不是它内部的图像,也不是位图的坐标。确切地说,最后一部分是我真正的目标。图像编辑软件正是我试图开发的,这是阻碍它发展的主要因素。如果有备用控件,则欢迎使用。另外,我不是指控件的边界,我是指其中显示的图像的边界。您确实应该寻找图像
控件的替代品。在这种情况下,您可能需要自己编写一个。确切地说,最后一部分是我真正的目标。图像编辑软件正是我试图开发的,这是阻碍它发展的主要因素。如果有备用控件,则欢迎使用。另外,我不是指控件的边界,我是指其中显示的图像的边界。您确实应该寻找图像
控件的替代品。在这种情况下,您可能需要自己编写一个。