与开罗的大图像

时间:2009-03-05 14:19:47

标签: python cairo

我必须使用cairo渲染一个非常大的图像(&gt;50.000²像素)。为了做到这一点而不耗尽内存我一个接一个地渲染图像的部分(<1.000²像素),然后将它们合并在一起。

  1. 创建1000x1000曲面
  2. 转换为当前部分的位置
  3. 绘制图像(使用pycairo调用绘图说明)
  4. 将图像渲染/保存到文件(cairo_surface_write_to_png)
  5. 重复下一部分
  6. 因为cairos裁剪算法比我自己更快,所以第三步绘制整个图像,即使只有一部分是可见的。大多数CPU在步骤3中使用(通过python)。大部分内存用于步骤4(通过cairo)。

    有没有办法加快速度?像这样的东西?

    1. 创建1000x1000曲面
    2. 绘制图片
    3. 将所有内容移至当前部分的位置
    4. 将图像渲染/保存到文件
    5. 用下一部分重复3
      1. 创建50000x50000曲面
      2. 绘制图片
      3. 仅将图像的当前部分渲染/保存到文件
      4. 用下一部分重复3

1 个答案:

答案 0 :(得分:2)

首先,使用C或Vala代替Python可能会加快速度。

至于内存使用情况,我会尝试写入自己的流,而不是文件(请参阅write_to_png_stream)。这个可以允许你(我没有尝试这个)控制内存使用,假设Cairo在完成所有操作后只调用你的函数一次。