4

Bresenhamの線アルゴリズムまたは類似のものに基づいて、特定の太さの線を描くアルゴリズムを誰かが知っているかどうか疑問に思っていました。

もう一度考えてみると、 setPixel(x,y) ごとに円を描くだけだと思っていました。たとえば、次のようになります。

FilledCircle(x,y,厚さ); すべての x、y に対してですが、もちろんそれは非常に遅くなります。私も辞書を使用しようとしましたが、すぐにメモリがいっぱいになります。描画しようとしているピクセルが同じ色であるかどうかを確認しますが、これも大きなブラシには十分に効率的ではありません。

角度によってはなんとか半円が描けるかも?

任意の入力をいただければ幸いです。

ありがとう。

複製: Bresenham を使用して任意の太さの線を作成するにはどうすればよいですか?

4

3 に答える 3

3

何が一般的に使われているのかわかりませんが、1ピクセル幅の線にブレゼンハムを使用できるようですが、垂直方向または水平方向に設定されたピクセル数だけ拡張します。たとえば、線が水平から約30度離れていて、幅を4ピクセルにしたいとします。線の垂直方向の太さは5ピクセルであると計算します。ブレゼンハムを実行しますが、各ピクセル(x、y)に対して、実際には(x、y)、(x、y + 1)、...(x、y + 4)を描画します。また、線の端を丸くしたい場合は、両端に円を描きます。

やり過ぎの場合は、スタイラスのピクセルマップ(円または斜めのペン先など)を作成してから、スタイラスの各ピクセルに1つずつ、平行なブレゼンハム線のセットを描画します。

于 2009-09-15T15:44:18.507 に答える
2

Bresenham には、アンチグレイン ジオメトリライブラリで使用されるものなど、ピクセル カバレッジを計算するバリエーションがあります。その品質が必要かどうか-出力媒体が何であるかは言わず、オン/オフLCDSよりも能力のあるほとんどのシステムはとにかく太いペンをサポートします.

于 2009-09-15T15:53:17.147 に答える