3

現在、pictureBox に表示されている画像に何かを描画しようとしています。マウス アクティビティのイベント ハンドラーを使用しています: onMouseUp、onMouseMove、および onMouseDown。

private void onMouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
    }

    private void onMouseMove(object sender, MouseEventArgs e)
    {
        if (mouseDown)
        {
            using (Graphics g = pictureBox.CreateGraphics())
            {
                g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2);
            }
        }
    }
private void onMouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;

        using (Graphics g = pictureBox.CreateGraphics())
        {
            g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2); //just in case user just clicks instead of move the mouse
        }
    }

マウスが pictureBox の上を移動しているときに、指定されたサイズ (半径) の円を描くブラシ ツールをシミュレートしようとしています。動きが遅い場合はうまく機能しますが、動きが速い場合、pictureBox は一部のイベントのみをキャッチするように見え、多くの円がスキップされて描画されません。特に半径が小さい場合。

より速くスムーズにするにはどうすればよいですか?

4

1 に答える 1

4

MouseMoveマウスが移動すると、マウス ポインターが移動するすべてのピクセルに対してイベントが発生するわけではありません。かなり一定の時間間隔でそれらを取得するため、マウスの動きが速ければ速いほど、取得するポイントが離れます。この特定の詳細については、あまりできません。

あなたがする必要があるのは、受け取った最後のポイントの位置を保存し、最後のポイントと新しいポイントの間のすべてのポイントで楕円を描くことです。

于 2013-02-12T12:02:39.773 に答える