カイロは本当に素晴らしいです!ctx.clip() は、クリッピング パスを使用してそれを行う 1 つの方法です (以下に 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")