从一个表面到另一个表面绘制

时间:2014-02-08 12:06:30

标签: python cairo

import cairo
import math

w = 2000
h = 2000

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx = cairo.Context(surface)
ctx.scale(w, h)

surface_path = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx_path = cairo.Context(surface_path)
ctx_path.scale(w, h)

surface_circle = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx_circle = cairo.Context(surface_circle)
ctx_circle.scale(w, h)

""" Lots of function calls that draw paths to surface_path and circles to surface_circle """

ctx.set_source_surface(surface_path, 0, 0)
ctx.paint()
ctx.set_source_surface(surface_circle, 0, 0)
ctx.paint()

surface_path.write_to_png("example.png")
surface_circle.write_to_png("example2.png")
surface.write_to_png("result.png")

Imgur link to saved images

我正在尝试将两个曲面(一个带有线,一个带圆圈)编译到一个单独的曲面上,然后将其保存到文件中。

尽管遵循文档建议应该起作用的内容,但最终图像最终仍为空白。我也尝试在flush()surface_path上调用surface_circle,但这似乎什么也没做。

如何将surface_circle(example2.png)中的图像信息合并到surface_path(example.png)之上,然后将其输出到文件中?

1 个答案:

答案 0 :(得分:1)

在最后几次paint()调用之前尝试调用ctx.identity_matrix()。

就像现在一样,由于您调用ctx.scale(w,h),您只能将其他表面的左上角像素按比例放大以填充所有目标曲面。