0

ユーザーがマウスを押したまま移動することで描画できるフォームを作成しようとしています。したがって、MouseMove イベントをサブスクライブし、指定された Point を使用してその時点で Pixel を描画します。

残念ながら、マウスを速く動かすほど、メッセージ キューによってスキップされて破棄されるポイントが増えるため、ペンで描いた線ではなく、一連のポイントになってしまいます。

各ポイント間の空白を手動で埋める必要がありますか? もしそうなら、2点間の点のリストを計算するための良いアルゴリズムは何ですか?

4

4 に答える 4

1

ユーザーがGraphics.DrawLineを使用してそれらを描画および表示している間、点を線分として保存することができます。実際のポイントが必要な場合、直線を使用するか、それらを通る円弧 (丸め) を補間するかを決定する必要があります。

直線についてはhttp://en.wikipedia.org/wiki/Bresenham's_line_algorithmがあります - 弧はもう少し複雑です:)

于 2011-08-22T14:50:18.690 に答える
0

この方法で描画する通常の手順は、点ではなく線を使用することです。擬似コードは次のとおりです。

on mousemove
{
    draw line from lastCoord to current coordinate
    store current coordinate in lastCoord
}

on mousedown
{
    store current coordinate in lastCoord
}
于 2011-08-22T14:48:46.517 に答える
0

MouseDownユーザーがマウス ボタンを押したときの点 ( ) とマウス ボタンを離したときの点( )の 2 点だけを使用する必要がありますMouseUp。次に、これら 2 点間に線を引きます。

たとえば、Graphics.DrawLineメソッドで...

于 2011-08-22T14:48:52.710 に答える
0

マウスを最後に見たポイントから現在の位置まで線を引くだけです。

于 2011-08-22T14:47:57.903 に答える