5

cairo で非常に大きな画像 (>50.000² ピクセル) をレンダリングする必要があります。メモリを使い果たすことなくこれを行うには、画像の一部 (<1.000² ピクセル) を次々にレンダリングし、後でそれらをマージします。

  1. 1000x1000 サーフェスを作成
  2. 現在のパーツの位置に移動
  3. 画像を描画する (pycairo を使用して描画命令を呼び出す)
  4. 画像をレンダリング/ファイルに保存 (cairo_surface_write_to_png)
  5. 次の部分で繰り返します

cairos クリッピング アルゴリズムは私のものよりも高速であるため、ステップ 3 では、画像の一部しか表示されていない場合でも、画像全体を描画します。CPU のほとんどは、ステップ 3 (by python) で使用されます。メモリの大部分は、ステップ 4 (カイロによる) で使用されます。

物事をスピードアップする方法はありますか?このようなもの?

  1. 1000x1000 サーフェスを作成
  2. イメージを描く
  3. すべてを現在のパーツの位置に移動
  4. 画像をレンダリング/ファイルに保存
  5. 次の部分で 3 を繰り返します

また

  1. 50000x50000 サーフェスを作成
  2. イメージを描く
  3. 画像の現在の部分のみをファイルにレンダリング/保存
  4. 次の部分で 3 を繰り返します
4

1 に答える 1

2

まず第一に、Python の代わりに C または Vala を使用すると、おそらく速度が向上します。

メモリ使用量については、ファイルではなく、独自のストリームに書き込もうとします ( write_to_png_streamを参照)。これにより、すべてが完了した後に Cairo が関数を 1 回だけ呼び出さないと仮定すると、メモリ使用量を制御できます (私はこれを試しませんでした)

于 2009-03-05T14:30:03.167 に答える