[cairo] Converting to 8 bit black and white
ifoundthetao at gmail.com
Tue Sep 25 09:02:42 PDT 2012
Thanks! I actually figured it out a while ago, and thought I emailed
the list (but I only replied to the person who responded to my original
post)! My apologies, as I would have liked to share this with everyone.
Here's most of the previous email:
I pulled in my png, put it on a surface.
I created a pattern
I set the color
I used the mask.
// Assume we already have a surface type
cairo_t *cr = cairo_create(cr);
//PNG to Surface. filename is the location of the file you want to open
cairo_surface_t *png = cairo_image_surface_create_from_png(filename);
// Pattern pointer to use with the surface
cairo_pattern_t *pattern = cairo_pattern_create_for_surface(png);
//Set the source to black
cairo_set_source_rgb(cr, 0, 0, 0);
Hope that helps someone!
'We who cut mere stones must always be envisioning cathedrals.'
Quarry Worker's Creed
On 9/25/2012 10:52 AM, Ben wrote:
> May be too late...
> On Tue, 2012-09-18 at 13:36 -0500, Timothy Bolton wrote:
>> I have another question. How do you convert a surface from color to 8
>> bit black and white? I've been searching and I cannot seem to find a
>> way to convert a surface to black and white.
>> I'm pulling in images, and I need them to be black and white (not gray
>> scale) for the rendering.
> If you use CAIRO_OPERATOR_HSL_COLOR with a grey source you get a
> grey-scale image. You can then threshold it by adding and burning with
> the darkest non-black source you can construct:
> cairo_t *cp = cairo_create(surf);
> cairo_set_source_rgb(cp, t, t, t);
> cairo_set_operator(cp, CAIRO_OPERATOR_HSL_COLOR);
> cairo_set_operator(cp, CAIRO_OPERATOR_ADD);
> cairo_set_source_rgb(cp, DBL_MIN, DBL_MIN, DBL_MIN);
> cairo_set_operator(cp, CAIRO_OPERATOR_COLOR_BURN);
> t is the level below which the result will be black.
> There may be a neater way to do this, but this method was the first that
> came to mind (I tend to stop once I have any solution).
More information about the cairo