[cairo] Compositing strategies and pre-multiplied alpha

Mauricio Piacentini mauricio at tabuleiro.com
Wed Sep 21 13:25:21 PDT 2005

I need some help understanding the rationale behind using pre-multiplied
alpha in a graphics API, and I understand this is used in Cairo image 
surfaces, according to the docs. Please understand I am not questioning 
this decision, just trying to grasp the implications of this method as 
far as my particular needs are concerned.
Let me explain this better: suppose I want to display two rotated
bitmaps and two svg files in the same screen, but animated. A possible
optimization would be to maybe render each element to a different 
surface, and then composite the resulting "sprites" in a final screen 
surface. This way I would not have to re-render the svg data for example 
or rotate the bitmap at every frame, unless I decide to rotate or scale 
one of the elements. As long as I am simply moving the sprites in x and 
y the caching of data as bitmaps would conceivably speed up things a 
lot, right?
The big question is: am I right to assume that doing the above (caching 
the data as bitmaps with pre-multiplied alpha) will automatically reduce 
the quality of antialiasing? The effect would probably not be noticeable 
on a black background, but if I composite one cached bitmap on top of 
another I will have a drop in antialiasing quality, wouldn't I? Or is 
this not important as long as I move my sprites in whole pixel 
increments (subpixel is obviously not possible in a scenario like this.)


More information about the cairo mailing list