1

mousemove イベントでピクチャボックスの周りに図形をドラッグしようとしていますが、スムーズに移動するのに苦労しています。画像ボックスには背景として読み込まれた画像があり、マウスをクリックしてドラッグすると、グラフィックオブジェクトが画像の上に円をドラッグしたいと思います。

マウスが動くたびに元の画像のクローンを作成し、画像ボックスをリロードすることで機能していますが、これを実現するにはより良い方法である必要があるようです。

追加されたグラフィックスが画像に残るたびに元のビットマップを再読み込みせずに、ペイント アプリケーションに似たトレイルを作成します。

毎回イメージ全体をリロードせずに以前の描画をクリアするにはどうすればよいですか? どんな助けでも感謝します。

private void picCanvas_MouseMove(object sender, MouseEventArgs e)
{
    if (_drag)
    {
        picCanvas.Image = (Bitmap)_original.Clone();
        Graphics g = Graphics.FromImage((Bitmap)picCanvas.Image);
        g.DrawEllipse(_whitePen, e.X, e.Y, 10, 10);
        picCanvas.Invalidate();
    }
}

private void picCanvas_MouseDown(object sender, MouseEventArgs e)
{
    _drag = true;
}

private void picCanvas_MouseUp(object sender, MouseEventArgs e)
{
    _drag = false;
}
4

3 に答える 3

3

このサンプルを確認してください。より簡単です

//Load Image
Bitmap TestImage = new Bitmap(FileName);
//Create Graphics Object
Graphics g = Graphics.FromImage(TestImage);                   
g.DrawEllipse(new Pen(Color.Red), i, j,0.5F, 0.5F);
//View Your Results
pictureBox1.Image = TestImage;
于 2012-10-08T19:14:18.783 に答える
0

Honibisからの上記の回答を使用して、これで終わりました。

画像を読み込み、画像を無効にして更新します

picCanvas.Image = image;
picCanvas.Invalidate()

その後、ペイントイベントで

private void picCanvas_Paint(object sender, PaintEventArgs e)
{
  if (_drag)         
  {
    using (Pen pen = new Pen(Color.White, 2))
    {
      e.Graphics.DrawEllipse(pen, pos.X, pos.Y, 10, 10);
    }
  }
}
于 2011-02-02T10:54:17.703 に答える
0

問題を最善の方法で解決するには、picCanvas.Paintイベントを使用します。mousemove イベントで位置を設定し、その位置を使用して paint イベントで描画します。

    Point pos = Point.Empty;// or your initial position

    private void picCanvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (_drag)
        {
            pos = e.Location;
        }
    }
    private void picCanvas_Paint(object sender, PaintEventArgs e)
    {
        if (_drag)
        {
            Graphics g = e.Graphics;//The event handler sends us the graphics object to use for painting
            g.DrawEllipse(_whitePen, pos.X, pos.Y, 10, 10); 
        }
    }

コントロールに Paint イベントを追加し、フォームロードまたは何らかの初期化関数で画像を設定する必要があります。

picCanvas.Image = (Bitmap)_original.Clone(); 
于 2011-02-02T09:33:52.167 に答える