皆さんこんにちはこんばんは、まずここブログを運営してます「よーす」です!
今日は、Visual VsudioのWPFを使っていて苦労した
画像(Imageコントロール)上でクリックした座標を取得する方法をご紹介します。
色々やり方はありますが、使うのは
WPFコンポーネントの「Image」を使って開発していきます。
開発環境
開発環境
- Windows 10
- Visual Studio 2019
- WPF(Windows Presentation Foundation)
- 言語:C#
クリックした画像(Imageコントロール)上の座標を取得
今回やりたいことは、シンプルに画像の座標を取りたいということだけ。
画像が拡大されようが、縮小されて表示されようが同じところをクリックしたら同じ座標を
取得するという処理を作ろうと思いました。
RasterImageViewerクラスというツールも使おうかと考え以下のサイトの参考にしましたがうまくできませんでした。
↓↓↓
[WPF] コントロールの追加(Leadtools.Controls.Wpf)
このRasterImageViewerというのは、LEADTOOLSというところが作っているようなのですが
その公式のサイトでは、どうやらRasterImageViewerは使えなくなって
新しくImageViewerというものに変更したらしいです。
ただ、このImageViewerも使い方がわからず断念。
ポイント
標準のImageを使って実装することにしました。

実装コード
private Point mcClickPoint = new Point();
private void Button_Click(object sender, RoutedEventArgs e)
{
string imagePath = ""; // 画像のパスを入れてください。
Uri tifUri = new Uri(imagePath );
Image.Source = new BitmapImage(tifUri);//画像の描画
Image.Stretch = Stretch.None; //これは、画像を引き延ばさないようにしているだけ。好みで調整してください。
}
private void mainImageBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
mcClickPoint = e.GetPosition(Image);
e.Handled = true;
MessageBox.Show("x座標:" + mcClickPoint.X.ToString() + "\r\ny座標:" + mcClickPoint.Y.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
以下のUsingもお忘れなく
using System.Windows;
以上のコードを実行すると

このように座標の取得ができます。
まとめ
とりあえず、欲しい機能の1つができました。
あとは、拡大縮小や切り抜き処理、切り抜き位置の取得処理などを
実装していけば作りたいものができるかなっと考えています。
また作ったものは共有していきます。
最後まで読んで頂きありがとうございます!