0

ラスターベースのペイント プログラムを作成しているとします。私のブラシは楕円形です。ユーザーはマウスをクリックしてからドラッグし、領域をペイントします。これで、pointA (クリックした場所) と pointB (マウス ドラッグから返された最初の点) の 2 つの点ができました。ブラシ領域内にあるすべてのピクセルを塗りつぶしたいと考えています。これを行う最善の方法は何ですか?

私の最初のアプローチは、2 つの点の間の勾配を計算し、次に pointA から pointB までインクリメントすることです。間の各ポイントについて、楕円の範囲内にあるすべてのピクセルを検索し、範囲内にある場合はオンにします。しかし、これは効率が悪いように思われます。なぜなら、ピクセルはしばしば 2 回以上 (ベン図を考えてください) インクリメントが楕円よりもはるかに小さいため、複数回チェックされるからです。

これに対するより良いアプローチはありますか?より効率的で、ピクセルをチェックする必要がある回数を最小限に抑える方法。

4

1 に答える 1

0

私は現在、非常に似たようなことをしており、私が何をしているのかを伝えることができます:

  • マウスが移動し、マウスがあるポイント(x,y)を受け取ります
  • Bresenham アルゴリズムを使用して、あるマウス位置から次のマウス位置までの線を推定します (すべてのピクセルでマウス移動イベントを取得するわけではありません)。
  • 次に、適切な間隔 (ブラシの 20%) で線に沿ってブラシの先端 (円) を「スタンプ」 (別名描画) します。

あなたが使っているプログラミング言語やフレームワークがわからないので、コードを教えることはできません :)

于 2011-05-23T13:07:15.413 に答える