0

你能帮我解决这个问题,因为我想使用 cairo 和 x11 api 从 cairo xlib 表面的 GC 创建一个图像吗?

4

1 回答 1

2

我仍然不确定我是否真的理解你的问题,但让我们试试:

您有一个名为 cairo X11 的表面x11_surf,并希望将其内容放入一个名为的新图像表面img_surf

double x1, y1, x2, y2;
cairo_t *cr;
cairo_surface_t *img_surf;

/* Figure out the size of the x11 surface */
cr = cairo_create(x11_surf);
cairo_clip_extents(cr, &x1, &y1, &x2, &y2);
cairo_destroy(cr);

/* Allocate an image surface of a suitable size */
img_surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, x2, y2);

/* Copy the contents over */
cr = cairo_create(img_surf);
cairo_set_source_surface(cr, x11_surf, 0, 0);
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
cairo_paint(cr);
cairo_destroy(cr);

/* Done (Notice that nothing needed a GC here!) */
于 2013-08-17T15:10:09.017 回答