1

現在、画像の表示にWPFImageコントロールを使用しています。次のことを実行したい:またはイベントでMouseUp、コントロールの左上隅を参照するのではなく、表示されたビットマップの実際の座標を参照して、カーソルの下のポイントの座標を取得したい、再スケーリングされているか、コントロール自体とは異なるアスペクト比を持っている可能性があります。代替コントロールがこの機能を提供する場合、私はそれについて聞いて同様にうれしいです。前もって感謝します。MouseDownMouseMove

編集:アスペクト比が異なるために、コントロールの座標が画像の範囲外にあるかどうかも知りたいのですが。

4

2 に答える 2

3

クラスのさまざまなTransformTo*メソッドを使用しVisualて、特定のコントロールに関連する座標を取得できます。ビジュアル ツリーに適用されるすべての変換が考慮されます。

MouseUpまた、MouseDownMouseMoveImageコントロール自体にアタッチすると、 から正しい座標を取得する必要MouseButtonEventArgsがあり、コントロールの視覚的な境界の外でマウスを使用すると、これらのイベントは取得されないため、追加の必要はありません。範囲外の座標のコード チェック。

実際の目標がビットマップ画像のどの実際のピクセルがマウスで触れられているかを調べることである場合(ビットマップ/ピクセル編集ソフトウェアで必要になるため)、WPF は直接関係のない仮想デバイス固有のピクセルを使用するため、事態はさらに難しくなります。画面上のピクセル、またはImageコントロールでレンダリングされたビットマップ内のピクセル。コントロールはImage、ビットマップ ファイル自体の DPI 設定とオペレーティング システムの DPI 設定に基づいて、ビットマップ イメージを内部的にスケーリングします。

于 2012-11-19T10:09:04.547 に答える
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
}

それがあなたの質問の一部に答えたことを願っています。

于 2012-11-19T10:13:46.967 に答える