2012-12-16 72 views
2

我的程序基本上是關於分析視頻。 一個主要部分是繪製一個圖表,顯示y軸上的每幀亮度(f.e.)和x軸上的每個幀數。由於該程序是用C#編寫的並使用WPF,因此D 3是繪圖的途徑。動態數據顯示/獲取用戶輸入的x座標

現在用戶可能會在圖表中看到峯值信號,並希望看到該單幀以瞭解其爲何如此明亮(它可能只是自然的,或編碼僞像)。

我的問題出現了:用戶點擊峯值圖的最直觀的方式,它將視頻預覽(其他GUI元素)跳轉到該幀的右側。所以我需要用戶點擊圖上的x座標(=幀號)。

可以手動分析鼠標輸入事件,但這需要很多工作(因爲每個視頻的x軸不同,整個圖表可以調整大小,因此絕對座標是不可行的)。 但是也許D³已經實現了類似的東西。我搜查了紀錄片,但沒有發現任何有用的東西。唯一的信息是使用「DraggablePoint」,但這就是路徑變冷的地方。 您的某個人是否知道如何在沒有太多工作的情況下獲得x座標?

回答

2

這當然有可能!我過去的做法是爲我的繪圖儀的孩子添加一個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; 
} 

然後可以使用x值和操縱它,但是你想實現你想要的效果。