将图像的一部分绘制到cairo表面

时间:2011-01-14 16:11:25

标签: image pygtk cairo

我正在使用pygtk和cairo(......我必须说的很好的东西。感谢所有人)

我想知道如何在大型绘图区的我的cairo表面上呈现部分图像。

我希望显示的表面中的区域看起来像是剪裁的,这样我就可以在这些区域滚动图像而不会打扰周围绘制的项目。

我可以将部分绘图的图像剪切到曲面上,还是只需按正确的顺序绘制绘图序列,以便需要剪裁的图像覆盖并根据需要隐藏部分并显示剪裁?

感谢任何指针

缺口

1 个答案:

答案 0 :(得分:1)

开罗确实太棒了! ctx.clip()是一种方法,使用剪切路径(如下面的pycairo所示,最终的绘制矩形只能击中三角形剪裁区域)。

您也可以使用CAIRO_OPERATOR_OUT的传输模式(我认为),但我不熟悉传输模式。这只会在第一次抽奖时起作用,因为你的内容会填充alpha。

(你对“绘画顺序”的建议当然也会正常工作!)

import cairo

WIDTH, HEIGHT = 256, 256

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context (surface)

ctx.rectangle(0,0,300,300)
ctx.set_source_rgb(0,0,0)
ctx.fill()

ctx.move_to(0,0)
ctx.line_to(200,90)
ctx.line_to(90,200)
ctx.line_to(0,0)
ctx.close_path()
ctx.clip()

ctx.rectangle(0,0,300,300)
ctx.set_source_rgb(1,1,0)
ctx.fill()

surface.write_to_png("clipped.png")