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 に答える