5

我必须用 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
4

1 回答 1

2

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

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

于 2009-03-05T14:30:03.167 回答