Jaa


ブログ用 画像ユーティリティ ④ モザイク矩形領域の取得

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);
  }
}