mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-06 04:38:04 +02:00
test: Use a group to render PDF correctly using poppler.
In order to support blend modes, we need to use a clear background whilst rendering the PDF, which inspired the use of DEST_OVER to avoid having to render to an intermediate surface. However, the adjunct of using subpixel text means that we cannot simply using the alpha channel as the sole mask and so need to render to an intermediate and paint it over an opaque background.
This commit is contained in:
parent
7f227ec8d3
commit
f74b11415a
2 changed files with 12 additions and 6 deletions
|
|
@ -357,14 +357,17 @@ _poppler_render_page (const char *filename,
|
|||
|
||||
poppler_page_get_size (page, &width, &height);
|
||||
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
|
||||
cr = cairo_create (surface);
|
||||
|
||||
cairo_set_source_rgb (cr, 1., 1., 1.);
|
||||
cairo_paint (cr);
|
||||
cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
|
||||
poppler_page_render (page, cr);
|
||||
g_object_unref (page);
|
||||
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
|
||||
cairo_set_source_rgb (cr, 1., 1., 1.);
|
||||
cairo_pop_group_to_source (cr);
|
||||
cairo_paint (cr);
|
||||
|
||||
status = cairo_status (cr);
|
||||
|
|
|
|||
|
|
@ -74,15 +74,18 @@ int main (int argc, char *argv[])
|
|||
|
||||
poppler_page_get_size (page, &width, &height);
|
||||
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
|
||||
cr = cairo_create (surface);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
cairo_set_source_rgb (cr, 1,1,1);
|
||||
cairo_paint (cr);
|
||||
cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
|
||||
poppler_page_render (page, cr);
|
||||
g_object_unref (page);
|
||||
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
|
||||
cairo_set_source_rgb (cr, 1., 1., 1.);
|
||||
cairo_pop_group_to_source (cr);
|
||||
cairo_paint (cr);
|
||||
|
||||
status = cairo_surface_write_to_png (cairo_get_target (cr),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue