2012-11-19 127 views
1

目前,我正在使用WPF Image控件來顯示圖像。我想要執行以下操作:在MouseUpMouseDownMouseMove事件中,我想獲取光標下的點的座標,而不是參考控件的左上角,但是關於實際的座標所顯示的位圖可能已被重新縮放,或者可能具有與控件本身不同的寬高比。如果一個備用控件提供了這個功能,我同樣樂意聽到它。提前致謝。如何獲取顯示圖像的(x,y)座標?

編輯:我也想這樣可能知道它,如果控制的座標超出圖像的範圍,由於不同的縱橫比。

回答

3

您可以使用Visual類的各種TransformTo*方法獲取與相關控件相關的座標,並將所有應用於視覺樹的轉換考慮在內。

此外,如果附加MouseUpMouseDownMouseMoveImage控制本身,你應該已經從MouseButtonEventArgs得到正確的座標,如果您使用鼠標控制的視覺範圍之外,你不會得到這些事件,所以你不需要額外的代碼檢查座標超出界限。

如果您實際目標是找出你的位圖圖像的acutal像素已經通過鼠標觸摸(正如你所需要的位圖/像素編輯軟件)事情變得更難,因爲WPF使用虛擬設備indendent不直接與屏幕上的像素相關的像素或位圖中已在Image控件中呈現的像素。 Image控件內部根據位圖文件本身的DPI設置和基於操作系統的DPI設置來縮放位圖圖像。

+0

最後一部分是我確切的目標。一個圖像編輯軟件正是我想要開發的東西,而這正是它阻止它的一個主要部分。如果有任何替代控制,將受到歡迎。另外,我並不是指控件的邊界,我的意思是顯示圖像的邊界。 –

+0

在這種情況下,您肯定應該尋找'Image'控件的替代方法,您可能需要自己編寫一個。 – bitbonk

3

您可以通過這種方式獲得鼠標的座標:

private void image1_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
Point point = e.GetPosition(image1); //position relative to the image 
Point point2 = e.GetPosition(this); //position relative to the window 
} 

希望這回答了你的問題的一部分。

+0

我已經知道這一點,但我會將其標記爲有用。你讓我訪問相對於'Image'控件的座標,而不是真正相對於它內部的圖像,而不是真正的位圖座標。 –