2012-03-05 2 views
1

私は、フリーフォーム選択を使用してmsペイントで行うことができるように、ピクチャボックスコントロールの任意の領域を選択するC#のウィンドウアプリケーションで作業しています。この領域も編集してください。 私は以下のコードを使用して描画領域午前: フリーフォームのC#でのピクチャボックスの選択

private void picturemap_MouseMove(object sender, MouseEventArgs e) 

     { 
       if (StartDrawing) 
       { 
        if (e.Button == MouseButtons.Left) 
        { 
          paintCurrentPosition(3, Color.Red, e.X, e.Y); 
        } 
       } 
     } 
     private void paintCurrentPosition(int thickness, Color colorPen, int x, int y) 
     { 
       SolidBrush brush = new SolidBrush(colorPen); 
       bmp = new Bitmap(picturemap.Image); 
       gr = Graphics.FromImage(bmp); 
       gr.FillRectangle(brush, x, y, thickness, thickness); 

       picturemap.Image = bmp; 
     } 

は、今私がここに描かれたものを地域を選択します。どんな助けでも大歓迎です。

+0

あなたの地域が長方形として渡されるBitmap.Clone()はどうでしょうか? http://msdn.microsoft.com/en-us/library/ms141944.aspx – Jason

+0

私はこの質問が幅広い方法だと思う - あなたが赤いボックスを選択したいと思うように - あなたが描きました。これを行うには、あなたが挿入したボックスの情報を(描画しているビットマップではなく)どこかに保存する必要があります。あなたのアプリのデザインがより複雑になり、私はあなたにここで短い答えを与えることはできないと思います... – Carsten

+0

私はカスタム領域をマークするために赤いボックスを描画しています。長方形の場合は、領域を選択する別の方法がある場合は – tanweer

答えて

1

ユーザーが描画している間に、フリーフォームシェイプの各座標をGrphicsPathオブジェクトに格納する必要があります。マウスを上にして、パスを閉じてください。

その後、ユーザーがマウスボタンを押さずにピクチャボックス上にマウスを置いたとき、マウスの移動時にHitTest(e.X、e.Y)を実行して、現在の座標がグラフィックパス領域内にあるかどうかを判断します。

計算の遅れを起こすことなく、非常に速くHitTestを実行できる多くの単純なアルゴリズムがあります。

これは、rectangle.Contains(x、y)テストを実行するのと同様です。

関連する問題