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

标签 c# wpf xaml zooming pan

我一直在寻找一种解决方案来透明地向 WPF 图像控件添加平移和缩放功能,我找到了解决方案 https://stackoverflow.com/a/6782715/584180 ,由 Wiesław Šoltés 开发和 Konrad Viltersten ,这是杰出的。

现在我想在控件中添加一个“鼠标点击”事件,这样我就可以在原始图像坐标系中得到点击点的坐标,这样我就可以用它们来检索像素颜色。

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

我不是 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;
}

最佳答案

为了将来引用,我试图实现的是:

    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);
    }

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

关于c# - 从鼠标光标在屏幕上的位置获取图像坐标(WPF 图像控件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585345/

相关文章:

WPF DataGrid - 使用复选框隐藏列

c# - 如何去除 ListBox 的模糊效果?

wpf - 如何水平对齐按钮并使用 xaml windows phone 均匀分布

wpf - 显示非矩形文本 block

c# - 如何调用所有类中的方法?

c# - 实时分析数据

必须包含引号“的c#字符串

c# - 我应该在哪里放置try catch?

wpf - 将命令绑定(bind)到 View 的 Loaded 事件

WPF和3D创建碗效果