Каир действительно замечательный! ctx.clip () - это один из способов сделать это, используя обтравочный контур (показан ниже просто в pycairo, где последний прямоугольник рисования попадает только в треугольную обрезанную область).
Вы также можете использовать режим передачи CAIRO_OPERATOR_OUT (я думаю), но я менее знаком с режимами передачи. И это сработает только при первом рисовании, поскольку ваш контент будет немного заполнять альфу.
(Ваше предложение о "Заказе покраски", конечно, тоже будет работать!)
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")