マウスの移動速度によって異なります。MouseMove イベントが頻繁に発生する場合とそうでない場合があります。また、その特定の瞬間にマシンにどれだけ負荷がかかっているかにもよると思います。2 点間に線を引くと、曲線ではなく直線になります。代わりに、BeziersとSplinesを確認する必要があります。そうすれば、いくつかの点に基づいて曲線が得られます。
しかし、コードで何かを行うことができます。最後のマウスダウン イベントと現在のマウスダウン イベントの間の距離がしきい値よりも大きい場合 (経験的に取得できます)、曲線に新しいドットを追加できます。以下は、1 つのドットを追加するサンプル コードです。
public bool isMouseDown { get; set; }
Point lastPoint = Point.Empty;
public double treshold { get; set; }
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
pictureBox1.Capture = true; // I try to capture mouse here
Graphics g = Graphics.FromHwnd(this.pictureBox1.Handle);
if (Math.Sqrt(Math.Pow(e.X - lastPoint.X, 2) + Math.Pow(e.Y - lastPoint.Y, 2)) > treshold)
{
g.FillRectangle(new SolidBrush(Color.Black), (e.X + lastPoint.X)/2, (e.Y + lastPoint.Y)/2, 1, 1);
}
g.FillRectangle(new SolidBrush(Color.Black), e.X, e.Y, 1, 1);
lastPoint = new Point(e.X, e.Y);
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
isMouseDown = true;
lastPoint = new Point(e.X, e.Y);
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}