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

2024-01-11

我一直在寻找一种解决方案来透明地向 WPF 图像控件添加平移和缩放功能,并且我找到了解决方案https://stackoverflow.com/a/6782715/584180 https://stackoverflow.com/a/6782715/584180, 由开发维斯瓦夫·索尔特斯 https://stackoverflow.com/users/282801/wies%C5%82aw-%C5%A0olt%C3%A9s and 康拉德·维尔特斯滕 https://stackoverflow.com/users/1525840/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);
    }

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 不允许同一用户使用多个用户名多次连接到服务器或共享资源

    使用Windows 2008 R2 在我们的服务器上 我们收到此错误 不允许同一用户使用多个用户名与服务器或共享资源建立多个连接 断开与服务器或共享资源的所有先前连接 然后重试 尝试在命令行上映射驱动器时 但是 远程计算机没有打开资源管理器
  • 自动完成参数:列出静态字段,无需输入 ClassName::

    How to make auto completion list all static fields of a certain class that has appropriate variable type when ctrl space
  • 如何在 django 中的模板标签内获取模板的渲染输出?

    免责声明 这是一个后续问题我之前的问题 https stackoverflow com questions 5332640 how can i get a django template to render itself within a
  • 需要帮助理解证书链

    目前我正在编写一个java库来访问pointhq com的REST API 在开发 Android 客户端时 我意识到默认情况下不接受 SSL 证书 因此我编写了一个自定义 TrustManager 并添加了 pointhq com 证书
  • Spring、Jackson 和定制(例如定制反序列化器)

    由于对Spring还有些陌生 我遇到了一个problem https stackoverflow com questions 3535569 jackson json throws jsonmappingexception when flo
  • 动态启用/禁用 Azure WebJob 中的触发功能

    我们有一个 Azure Web 作业 它在 Functions cs 文件中具有两个方法 这两个作业都是由 Azure 服务总线中的不同主题触发的 由于这在运行时使用反射来确定要由命中主题的消息运行 触发的函数 因此代码中没有对这些方法的引
  • Xamarin 表单获取通话时长

    我有一个 xamarin forms 应用程序 当单击标签时它将打开拨号器 我想要实现的是 用户点击标签 gt 拨号器 ios 中的电话应用程序 打开 用户调用并结束 gt 返回应用程序 单击标签时我可以打开拨号器 我可以在我的应用程序中获
  • php://input 在 PHP 5.6.16 中只能读取一次

    PHP手册 http php net manual en wrappers php php声明使用 php input 打开的流支持查找操作 并且从 PHP 5 6 开始可以多次读取 但我无法使其工作 下面的例子清楚地表明它不起作用
  • 当没有输入时,currencyconverter可以忽略$符号吗

    在数据表中 我必须将输入验证为货币 当我删除 符号后输入值时 输入组件会抛出错误
  • Kendo UI jQuery 网格服务器端过滤

    我正在使用 Kendo UI for jQuery Grid 来显示一些数据 到目前为止 我正在使用客户端过滤和分页 其中所有数据记录都在对服务器的初始调用中返回 Web API 和 Dapper 在服务器端使用 然而 由于数据源随着时间的
  • 检查 lambda 表达式中的属性是否为 null

    我有一个试图绑定到列表视图的对象列表 我按两个属性排序 存在的问题是某些记录可能不具有其中一种属性 这会导致错误 我希望它仍然绑定具有该属性的记录 IEnumerable
  • Android图像变换矩阵,将触摸坐标平移回来

    我正在为 Android 构建一个 导航类型 应用程序 对于导航部分 我正在构建一个活动 用户可以使用触摸事件移动和缩放地图 这是位图 并且地图还可以使用指南针围绕屏幕中心旋转 我使用 Matrix 来缩放 转置和旋转图像 然后将其绘制到画
  • 3 层 ASP.NET MVC 应用程序中的依赖注入

    我有一个 3 层应用程序 各层是 Web 表示层 ASP NET MVC gt 只能看到 BLL BLL 业务逻辑层 gt 只看到DAL DAL 数据访问层 So the Web图层对我的一无所知DAL层 我的存储库接口和具体类DAL 它们
  • 如何使 MFC 复选框只读但保持文本启用?

    似乎通过 禁用 属性禁用复选框也会使标题变灰 有谁知道如何保持标题启用但禁用输入 EDIT 根据保罗的想法 我做了以下工作 现在我发现静态标签和复选框具有透明属性 添加了几个复选框 将复选框标题设置为空 将复选框透明属性设置为 true 在
  • 所有的最终课程都是不可变的吗?

    Java中的final类都是不可变的吗 String 和 Integer 都是最终类 我相信它们都是不可变的 不 final 意味着该类不能扩展 它没有提到可变性 例如 final class MutInt public int modif
  • 如何在 Interface Builder (Xcode) 中添加自定义控件

    所以我创建了一个继承自 UIView 的自定义控件 我想在 Interface Builder 中使用它 我知道我可以添加 UIView 并将其类名称设置为我的自定义控件类名称 但它仅出现在运行时 在界面生成器中它只是一个常规的 UIVie
  • ant jar 的主类

    如何在 ant 中设置 jar 的 Main Class 属性 创建清单
  • 第一个项目中心在 RecyclerView 的 SnapHelper 中对齐

    我在 RecyclerView 中使用 PagerSnapHelper RecyclerView 中的第一个项目位于屏幕的左侧位置 我需要居中对齐的第一个项目 LinearLayoutManager layoutManager new Li
  • 监控Wildfly9上的数据源连接池

    我正在开发一个项目 尝试获取数据源连接池的运行时统计信息 我使用 Wildfly 9 将其放入 deployment 文件夹中 我搜索了它 发现 standalone 文件夹中存在名为standalone xml 文件的配置文件 使用以下代
  • 从屏幕上的鼠标光标位置获取图像坐标(WPF 图像控件)

    我一直在寻找一种解决方案来透明地向 WPF 图像控件添加平移和缩放功能 并且我找到了解决方案https stackoverflow com a 6782715 584180 https stackoverflow com a 6782715