[cairo] Strange bug (?) when painting/cropping recording surface to PDF surface
Guillaume Ayoub
guillaume.ayoub at kozea.fr
Mon Apr 11 23:45:34 UTC 2016
Hi,
Thanks for your simple example. The patch seems to fix the problem.
--
Guillaume
Le lun. 11 avril 2016 à 7:49, Bernhard R. Fischer
<bf at abenteuerland.at> a écrit :
> On 2016-04-10 09:28, Adrian Johnson wrote:
>> On 10/04/16 03:25, Bernhard R. Fischer wrote:
>>> Hi!
>>>
>>> _Background_
>>> In my project a record all drawing operations to a recording
>>> surface.
>>> Finally, to output files I create surfaces of specific backends
>>> (PNG,
>>> PDF, and SVG) and "crop" (the final surface is smaller than the
>>> recording source surface), rotate, and paint the recording surface
>>> to it.
>>>
>>>
>>> _Strange Behavior_
>>> When using PDF as backend, not everything is painted from the
>>> source
>>> (recording) surface to the PDF surface. On PNG and SVG it works as
>>> expected.
>>>
>>>
>>> _Examples_
>>> There is a PNG and PDF example to show the behavior. Look at the
>>> right
>>> lower corner: right of the string "015°30" the short black lines
>>> in the
>>> axis are missing compared to the PNG.
>>> http://www.abenteuerland.at/download/eagle/output.pdf
>>> http://www.abenteuerland.at/download/eagle/output.png
>>>
>>>
>>> _Trigger_
>>> I observed, that this behavior is triggered as soon as the PDF
>>> surface
>>> is smaller than the recording surface.
>>>
>>>
>>> _Code Snippet_
>>> The following code snippets shows how I create the PDF and PNG
>>> surface
>>> from the recording surface (sfc_).
>>>
>>>
>>> /* create PDF from sfc_ */
>>> sfc = cairo_pdf_surface_create("output.pdf", width*.7,
>>> height*1.3);
>>> dst = cairo_create(sfc);
>>> cairo_rotate(dst, DEG2RAD(15));
>>> cairo_set_source_surface(dst, sfc_, 0, 0);
>>> cairo_paint(dst);
>>> cairo_show_page(dst);
>>> cairo_destroy(dst);
>>> cairo_surface_destroy(sfc);
>>>
>>>
>>> /* create PNG from sfc_ */
>>> sfc = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
>>> width*.7,
>>> height*1.3);
>>> dst = cairo_create(sfc);
>>> cairo_rotate(dst, DEG2RAD(15));
>>> cairo_set_source_surface(dst, sfc_, 0, 0);
>>> cairo_paint(dst);
>>> cairo_show_page(dst);
>>> cairo_destroy(dst);
>>> cairo_surface_write_to_png(sfc, "output.png");
>>> cairo_surface_destroy(sfc);
>>>
>>>
>>> Any hints appreciated.
>>
>> If you can provide a simple test case that reproduces the bug with
>> the
>> current version of cairo I can look into it.
>>
>
> Hi!
>
> Please find attached a simple test program which demonstrates it.
> I tested it on Cairo 1.14.6 and 1.14.0.
>
>
> Bernhard
>
>
> --
> cairo mailing list
> cairo at cairographics.org
> https://lists.cairographics.org/mailman/listinfo/cairo
More information about the cairo
mailing list