Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一个曲面绘制到另一个曲面_Python_Cairo - Fatal编程技术网

Python 从一个曲面绘制到另一个曲面

Python 从一个曲面绘制到另一个曲面,python,cairo,Python,Cairo,我试图将两个曲面(一个带直线,一个带圆)编译到一个单独的曲面上,然后将其保存到一个文件中 尽管遵循了文档中的建议,最终的图像还是空白的。我还尝试在surface\u path和surface\u circle上调用flush() 如何将surface\u circle(example2.png)中的图像信息组合到surface\u path(example2.png)上,然后将其输出到文件中?在最后几次调用paint()之前,尝试调用ctx.identity\u matrix() 现在,由于您对

我试图将两个曲面(一个带直线,一个带圆)编译到一个单独的曲面上,然后将其保存到一个文件中

尽管遵循了文档中的建议,最终的图像还是空白的。我还尝试在
surface\u path
surface\u circle
上调用
flush()


如何将
surface\u circle
(example2.png)中的图像信息组合到
surface\u path
(example2.png)上,然后将其输出到文件中?

在最后几次调用paint()之前,尝试调用ctx.identity\u matrix()


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

我不是开罗的专家,但我相信您需要一个“遮罩”。例如,选择一个源并绘制一条线。沿着线的路径,源被复制到目标。如果你什么也不画,就什么也不会被转移。我建议你画一个与图像大小相同的大矩形。请参见
ctx.set\u source\u surface(surface\u path,0,0)ctx.rectangle(0,0,1,1)ctx.fill()ctx.set\u source\u surface(surface\u circle,0,0)ctx.stroke()ctx.rectangle(0,0,1,1)ctx.fill()ctx.stroke()
我尝试了那段代码,但似乎仍然不起作用。这似乎奏效了。我不完全理解scale()和identity_matrix()的作用:(你能简单地解释一下/把我链接到一个解释的资源吗?scale将缩放应用于以下所有操作。当你缩放(a,b)时,以后使用的所有坐标将分别乘以a或b。换言之,它假定要绘制的曲面的大小仅为1/a、1/b。在代码中,它会缩放曲面,使所有坐标都在0和1之间,而不是0和w或h之间。所有这些都是恒等式矩阵()所做的是重置所有缩放、转换等,并返回到完全不转换状态。有关某些文档,请参阅
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")