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

  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
有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top