Re: Converting to 8 bit black and white

Timothy Bolton <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
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);

//Apply it
cairo_mask(cr, patter);

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_paint(cp);
>    cairo_set_operator(cp, CAIRO_OPERATOR_ADD);
>    cairo_paint(cp);
>    cairo_set_source_rgb(cp, DBL_MIN, DBL_MIN, DBL_MIN);
>    cairo_set_operator(cp, CAIRO_OPERATOR_COLOR_BURN);
>    cairo_paint(cp);
>
> 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).
>

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.