题
我必须用cairo渲染一个非常大的图像(<!> gt; 50.000 <!>#178;像素)。要做到这一点而不耗尽内存,我会一个接一个地渲染部分图像(<!> lt; 1.000 <!>#178;像素),然后将它们合并在一起。
- 创建1000x1000曲面
- 转换为当前部分的位置
- 绘制图像(使用pycairo调用绘图说明)
- 将图像渲染/保存到文件(cairo_surface_write_to_png)
- 重复下一部分 醇>
- 创建1000x1000曲面
- 绘制图片
- 将所有内容移至当前部分的位置
- 将图像渲染/保存到文件
- 用下一部分重复3 醇>
- 创建50000x50000曲面
- 绘制图片
- 仅将图像的当前部分渲染/保存到文件
- 用下一部分重复3 醇>
因为cairos裁剪算法比我自己更快,所以第三步绘制整个图像,即使只有一部分是可见的。大多数CPU在步骤3中使用(通过python)。大部分内存用于步骤4(通过cairo)。
有没有办法加快速度?像这样的东西?
或
解决方案
首先,使用C或Vala代替Python可能会加快速度。
至于内存使用情况,我会尝试写自己的流,而不是文件(参见 write_to_png_stream )。这个可以允许你(我没有尝试这个)控制内存使用,假设Cairo在完成所有操作后只调用你的函数一次。
不隶属于 StackOverflow