рисование части изображения на поверхности Каира - PullRequest
0 голосов
/ 14 января 2011

Я использую pygtk и cairo (... замечательные вещи, которые я должен сказать. Спасибо всем)

Мне интересно, как представить части изображений на моей поверхности в Каире на большом рисунке.

Я хотел бы, чтобы области на отображаемой поверхности выглядели обрезанными, чтобы я мог прокручивать изображения через эти области, не нарушая окружающие нарисованные элементы.

Можно ли вырезать изображения для рисования деталей на поверхностиили я должен просто получить последовательность рисования в правильном порядке, чтобы изображения, которые нужно обрезать, были перекрыты, а часть скрыта, как требуется, и казались обрезанными?

спасибо за любые указатели

nick

1 Ответ

1 голос
/ 15 января 2011

Каир действительно замечательный! 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")
...