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