[whatwg] Canvas operators (was Re: several messages)

L. David Baron dbaron at dbaron.org
Sun May 20 15:30:15 PDT 2007

On Sunday 2007-05-20 17:53 +0100, Philip Taylor wrote:
> If you care about alpha, and take cX as premultiplied colour
> components (and CX as non-premul, and aX as alpha), then you get:
> Mozilla:
>  cO = cA * min(1, (1-aB)/aA) + cB
>  aO = aA * min(1, (1-aB)/aA) + aB

Correct.  This is the cairo "saturate" operator, which I think is
the same as Xrender's saturate operator.

> Safari:
>  CO = 1 - (1-CA)*aA - (1-CB)*aB  except not quite
>  aO = aA + aB

I thought what Safari does is basically "lighter", but with the
color components inverted (where inverting is CX = 1-CX, or cX = aX
- cX), so that it comes out to:

 aO = min(1, aA + aB)
 cO = aO - min(1, aA - cA + aB - cB)

> you change alpha from 0.0 to 0.01. In all the implementations,
> 'lighter' is confusingly unlike 'darker' - names like 'plus' and
> 'multiply' make much more sense.)

Hrm.  I thought lighter was confusingly *like* darker, in that they
act exactly the same when the alphas add to less than or equal to 1.
(I think that's true for plus (a.k.a. lighter), Cocoa's darker, and
for saturate.)


L. David Baron                                <URL: http://dbaron.org/ >
           Technical Lead, Layout & CSS, Mozilla Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20070520/b9486d16/attachment-0001.pgp>

More information about the whatwg mailing list