[cairo] Compositing strategies and pre-multiplied alpha
spitzak at d2.com
Thu Sep 22 14:45:31 PDT 2005
Mauricio Piacentini wrote:
> 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.
If you were not premultiplying, compositing color C over B with alpha a
would be done with "Ca+B(1-a)".
In premultiplied images, the C pixel is replaced with A = Ca and the
math is changed to "A+B(1-a)". Substituting Ca for A will show that this
So mathematically there is no difference.
Advantages of premultiplied:
1. This is what almost all rendering and painting programs produce.
Correctly producing a non-premultiplied image would require tracking a
"coverage" for each pixel that is seperate from the "transparency".
Premultiplied allows you to combine these values very early.
2. Premultiplied images look correct when the rgb channels are viewed.
Non-premultiplied images will have noisy and bright pixels at any
3. Premultipled images are more convienent for other operations such as
adding to simulate a double exposure.
4. Premultiplied images allow "glow" where the color is greater than the
5. Premultiplied over is available on Windows.
Advantages of non-premultiplied:
1. Supposedly this is what .png files are supposed to be, but everybody
appears to be ignoring that.
2. The compositied result is always in the range 0-1, with no clamping
3. An 8-bit image can antialias any 8-bit color accurately. A
premultiplied image with 1/4 alpha, if added 4 times to get an opaque
image, will only have 64 possible colors in 8 bits. This advantage is
negated, however, because most implementations do not preserve
intermediate results of more than 8 bits, thus the non-premultiplied
version produces the same result.
I believe Cairo can do non-premultiplied, by setting the source pattern
and the mask to the same image, then doing a copy operation. So you
actually have both anyway.
More information about the cairo