ブログ用 画像ユーティリティ ④ モザイク矩形領域の取得
Windows1.xaml.csで実装する最後の作業である、モザイク矩形領域の取得を紹介します。マウスの左ボタン押下と移動のイベントを処理して、UserControlのClipRectプロパティに渡してやるだけです。
マウス左ボタンを押したところが必ずしも左上にはならないので、MouseMove用のコールバックでは矩形の左上と右下の座標を識別して、ClipRectに渡すRectをインスタンス化します。WPFの2D座標系は左上が原点で、右方向と下方向がプラスなので、XYともに小さい値の組み合わせが矩形の左上、XYとも大きい値の組み合わせが右下になります。
private Point p1 = new Point();
private Point p2 = new Point();
/// <summary>
/// マウス左ボタン押下用のコールバック
/// </summary>
private void UC_MouseLeftButtonDown(object sender,
MouseButtonEventArgs e)
{
p1 = e.GetPosition(myVgaImage);
myVgaImage.ClipRect = new Rect();
}
/// <summary>
/// マウス移動用のコールバック
/// </summary>
private void UC_MouseMove(object sender, MouseEventArgs e)
{
p2 = e.GetPosition(myVgaImage);
if (e.LeftButton == MouseButtonState.Pressed)
{
Point lt = new Point((p1.X > p2.X) ? p2.X : p1.X,
(p1.Y > p2.Y) ? p2.Y : p1.Y);
Point rb = new Point((p1.X > p2.X) ? p1.X : p2.X,
(p1.Y > p2.Y) ? p1.Y : p2.Y);
myVgaImage.ClipRect = new Rect(lt, rb);
}
}