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:
Chris Wilson 2010-06-11 14:06:15 +01:00
parent 7f227ec8d3
commit f74b11415a
2 changed files with 12 additions and 6 deletions

View file

@ -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);

View file

@ -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),