从屏幕上的鼠标光标位置获取图像坐标(WPF图像控件)

Lor*_*col 2 c# wpf xaml zoom pan

我一直在寻找一个解决方案,以透明地增加淘选变焦能力的WPF Image控件,我已经找到了解决办法/sf/answers/474790081/,通过开发维斯?AWŠoltés康拉德Viltersten,这是优秀。

现在,我想向控件中添加一个“鼠标单击”事件,以便可以在原始图像坐标系中单击被单击点的坐标,以便可以使用它们来检索像素颜色。

我知道会有一些舍入,并且如果缩小图像,颜色将与屏幕上显示的实际颜色不符。我也了解用户可能会在图像边界之外单击,在这种情况下,我希望返回一个空Point或负坐标。

我不是C#进行转换的专家,此刻,我仍然坚持这一点(要添加到ZoomBorder.cs类中):

public Point GetImageCoordsAt(MouseButtonEventArgs e)
{
    if (child != null)
    {
        var tt = GetTranslateTransform(child);
        var mousePos = e.GetPosition(this);
        var transformOrigin = new Point(tt.X, tt.Y);

        return mousePos; // Wrong: how do I transform this?
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

Lor*_*col 7

供将来参考,我试图达到的目的是:

    public Point GetImageCoordsAt(MouseButtonEventArgs e)
    {
        if (child != null && child.IsMouseOver)
        {
            var controlSpacePosition = e.GetPosition(child);
            var imageControl = this.Child as Image;
            var mainViewModel = ((MainViewModel)base.DataContext);
            if (imageControl != null && imageControl.Source != null)
            {
                // Convert from control space to image space
                var x = Math.Floor(controlSpacePosition.X * imageControl.Source.Width / imageControl.ActualWidth);
                var y = Math.Floor(controlSpacePosition.Y * imageControl.Source.Height / imageControl.ActualHeight);

                return new Point(x, y);
            }
        }
        return new Point(-1, -1);
    }
Run Code Online (Sandbox Code Playgroud)

它返回原始图像系统中鼠标指针的坐标。