2

我的程序基本上是关于分析视频的。主要部分是绘制图表,在 y 轴上显示每帧的 (fe) 亮度,在 x 轴上显示每个帧数。因为该程序是用 C# 编写并使用 WPF,所以 D³ 是用于绘图的方法。

现在用户可能会在图中看到一个峰值信号,并希望查看该单帧以了解为什么它如此明亮(它可能只是自然的,或者是编码伪影)。

我的问题来了:用户单击峰值所在的图表的最直观方式,它将视频预览(其他 GUI 元素)直接跳转到该帧。所以我需要用户点击图表的x坐标(=帧号)。

可以手动分析鼠标输入事件,但这需要做很多工作(因为每个视频的 x 轴不同,并且可以调整整个图表的大小,所以绝对坐标是不行的)。但也许 D³ 已经实现了类似的东西。我搜索了纪录片,但没有发现任何有用的东西。唯一的信息是使用“DraggablePoint”,但这就是路径变冷的地方。你们中有人知道如何在不做太多工作的情况下获得 x 坐标吗?

4

1 回答 1

3

这当然是可能的!我过去的做法是将 CursorCoordinateGraph 对象添加到我的绘图仪子级中,它会自动跟踪图表上相对于数据的鼠标位置。您可以关闭 CursorCoordinateGraph 的视觉功能并将其仅用于跟踪。这是它的样子:

CursorCoordinateGraph mouseTrack;
plotter.Children.Add(mouseTrack);
mouseTrack.ShowHorizontalLine = false;
mouseTrack.ShowVerticalLine = false;

您的鼠标单击事件如下所示:

private void plotter_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{
    Point mousePos = mouseTrack.Position;
    var transform = plotter.Viewport.Transform;
    Point mousePosInData = mousePos.ScreenToData(transform);
    double xValue = mousePosInData.X;
}

然后,您可以使用 xValue 并对其进行操作,但您想达到您想要的效果。

于 2012-12-18T14:36:02.240 回答