2009-03-05 71 views
5

我必須用cairo渲染一個非常大的圖像(>50.000²像素)。要做到這一點而不會耗盡內存,我會逐一渲染部分圖像(<1.000²像素),並稍後將它們合併在一起。開羅的大圖像

  1. 創建1000×1000的表面
  2. 轉換爲當前零件的位置
  3. 繪製圖像(調用使用pycairo繪圖指令)
  4. 渲染/保存圖像文件(cairo_surface_write_to_png)
  5. 重複與未來部分

因爲cairos裁剪算法比我自己快,第三步繪製整個圖像,即使只有一部分是可見的。大多數CPU在步驟3中使用(通過python)。大部分內存在步驟4中使用(由cairo開發)。

有沒有辦法加快速度?像這樣?

  1. 創建1000×1000的表面
  2. 繪製圖像
  3. 將一切當前部分
  4. 的位置渲染/保存圖像文件
  5. 重複3下一部分

  1. 創建50000x50000表面
  2. 繪製圖像
  3. 渲染/只保存圖像的當前部分文件
  4. 重複3下一部分

回答

2

首先,使用C或瓦拉而不是Python會可能會加快速度。至於內存使用情況,我會嘗試寫入自己的數據流,而不是文件(請參閱write_to_png_stream)。這可能允許你(我沒有嘗試這個)控制內存使用情況,假設開羅在所有事情完成後都不會調用你的函數。

+0

另一種語言不是一種選擇,也不能解決問題,但write_to_png_stream是一個好主意。謝謝 – defnull 2009-03-05 14:42:21