与开罗的大图像

def*_*ull 5 python cairo

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

  1. 创建1000x1000曲面
  2. 转换为当前部分的位置
  3. 绘制图像(使用pycairo调用绘图指令)
  4. 将图像渲染/保存到文件(cairo_surface_write_to_png)
  5. 重复下一部分

因为cairos剪切算法比我自己更快,所以第三步绘制整个图像,即使只有一部分是可见的.大多数CPU在步骤3中使用(通过python).大部分内存用于步骤4(通过cairo).

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

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

要么

  1. 创建50000x50000曲面
  2. 画图像
  3. 仅将图像的当前部分渲染/保存到文件
  4. 用下一部分重复3

Can*_*der 2

首先,使用 C 或 Vala 而不是 Python 可能会加快速度。

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