[cairo] Hi all and a couple questions...

J.A. Magallón jamagallon at ono.com
Thu Oct 30 02:24:07 PDT 2008


Hi to everyone...

I have just discovered cairo, and it's far far better than plain gdk.
I use it fot a portable application between Linux and Win, and
works flawlessly both in Xp and Vista.
Thanks for the good work!!.

Everything is working fine, but a thing.
I can't get a way to paint grayscale images without converting them
to 24/32 bits.
I'm writing a little app to do image processing that works with gray
images from a Bassler camera, and don't want to waste memory converting
them to RGB. But cairo does not have a plain 'gray image' surface
type, just an 'alpha channel' type. I have tried with several
source/fill colors, operators, etc but can't find the right combo.

What I suspect I should do is to paint in white filtered by my grayscale
alpha to get to the destination surface. But I can't get it right.

My code is basicly like this:

        // Clear the region to get some base color to draw on top
        gdk_cairo_region(cr,ev->region);
        //cairo_fill(cr);

	// set the source alpha, image() is A8
        cairo_set_source_surface(cr,(cairo_surface_t*)grabber->image(),0,0);
        // set the source color
        cairo_set_operator(cr,CAIRO_OPERATOR_OVER);
        cairo_paint(cr);

The above code paints the image in negative.
What should I use as base color/alpha to fill the surface, and what
operator to paint the image the right way ?

And other question is: How could I disable image interpolation in
cairo_paint() ? I want to zoom my image and see big square pixels, not
the (fancy, btw) interpolation that cairo does by default ?

Thanks in advance for your time.

-- 
J.A. Magallon <jamagallon()ono!com>     \               Software is like sex:
                                         \         It's better when it's free
Mandriva Linux release 2009.0 (Cooker) for i586
Linux 2.6.25-jam18 (gcc 4.3.1 20080626 (GCC) #1 SMP


More information about the cairo mailing list