1

元の質問:

Aggdraw ドキュメントで見つからない Python Aggdraw モジュールについて質問があります。画像オブジェクトにポリゴンをレンダリングし、入力座標を引数として受け取る「.polygon」コマンドを使用しています。

私の質問は、xy 座標を入れることができるシーケンス コンテナーのタイプ (リスト、タプル、ジェネレーター、itertools-generator、配列、numpy-array、deque など) を誰かが知っているか経験があるかどうか、そして最も重要なことに、どの入力タイプがAggdraw が画像を可能な限り高速にレンダリングするのを助けますか?

ドキュメントは、ポリゴンメソッドが取ることについてのみ言及しています:「Pythonシーケンス(x、y、x、y、…)」

私は、Aggdraw が他のシーケンス タイプよりもいくつかのシーケンス タイプに対して最適化されている、および/またはいくつかのシーケンス タイプを最初に変換する必要があるため、いくつかのタイプが他のタイプよりも高速になると考えています。では、誰かが理論上または経験上、Aggdraw の内部動作についてこれらの詳細を知っているのではないでしょうか?

私はいくつかの予備テストを行っており、すぐにさらに多くのことを行う予定ですが、テストを適切に行っていないか、Aggdraw を最適化するための追加の方法がある可能性があるため、1 つのオプションがより高速である理由の背後にある理論を知りたいと思っています。知らなかったレンダリング。

(ちなみに、これは些細な最適化のように思えるかもしれませんが、何万ものポリゴンをすばやくレンダリングし、それらをズームインおよびズームアウトできるようにすることが目標である場合はそうではありません。したがって、この質問については、他のレンダリングモジュールの提案は必要ありません(私のテストでは、とにかく Aggdraw が最速の 1 つであるように見えます。また、座標からピクセルへの変換など、他の最適化のボトルネックがあることも知っていますが、今のところ、Aggdraw の内部レンダリング速度の最終ステップにのみ焦点を当てています。)

他の人が Aggdraw についてどのような知識と経験を持っているか知りたいです。


勝者?いくつかの予備テスト

詳細が必要な場合は、ページのさらに下にある回答でいくつかの予備テストを実施し、結果を報告しました。主な調査結果は、float 座標を整数としてピクセル座標に丸め、それらを配列にすることが、Aggdraw でイメージまたはマップをレンダリングする最速の方法であり、比較可能な速度で 650% のスケールで信じられないほど高速なレンダリング スピードアップにつながることです。よく知られており、一般的に使用されている GIS ソフトウェアを使用します。残っているのは、座標変換とシェープファイルの読み込みを最適化するための迅速な方法を見つけることですが、これらは確かに困難な作業です。すべての調査結果については、ページのさらに下にある私の Answer 投稿をご覧ください。

独自のテストを行った場合、または他の有用な回答やコメントがある場合は、まだ興味があります. 誰かが知っているなら、私はまだボーナスの質問への答えに興味があります.


おまけの質問:

この質問に対する具体的な答えがわからない場合でも、実際の Aggdraw レンダリングがどのプログラミング言語で行われているかを知っていれば役立つかもしれません。Aggdraw モジュールは元の C++ Anti-Grain Geometry ライブラリの単なる Python バインディングであると読みましたが、それが実際に何を意味するのか完全にはわかりません。Aggdraw Python コマンドは、実際のレンダリングが C++ で C++ の速度で行われるように、「舞台裏」で C++ ライブラリにアクセスしてアクティブ化する方法に過ぎないということですか? もしそうなら、C++ は Python シーケンスを C++ シーケンスに変換する必要があり、最適化は、どの Python シーケンスが C++ シーケンスに最も速く変換できるかを見つけることであると推測します。それとも、Aggdraw モジュールは純粋な Python で書き直された元のライブラリにすぎないのでしょうか (したがって、C++ バージョンよりもはるかに低速です)。その場合、どの Python タイプがサポートされ、どのタイプのレンダリング作業がより高速であるか。enter code here

4

1 に答える 1