- From: REFSTRUP,JACOB (HP-Vancouver,ex1) <jacob.refstrup@hp.com>
- Date: Mon, 28 Jul 2003 13:59:39 -0400
- To: "www-style (www-style@w3.org)" <www-style@w3.org>
In CSS3 Color [1] "3.2. Transparency: the 'opacity' property" the term 'mask' is used without having a definition. After looking at SVG1.1 [2] it seemed to me that the clipping, masking and composition model of SVG1.1, chapter 14 was assumed (or equivalent in SVG1.0). Could we perhaps make a reference in [1] to this so it becomes more clear for readers not familiar with SVG1.1? In thinking through how to implement it I found it useful to internalize and learn these compositing rules and I made up an example. Perhaps an example like this could be included in [1] to further clarify what is supposed to happen so the implementer has something to verify his understanding against. Consider a <span> inside a <p> and the following stylesheet (a notation of p_rgba() is used for premultiplied rgba): p { background: blue } span { background: yellow; border: solid thin rgba(100%,0,0,0.8); color: rgba(100%,0,0,0.8); opacity: 0.7 } The intermediate canvas for <span> starts with transparent black: p_rgba(0,0,0,0) The border before compositing onto the <span> intermediate canvas is: rgba(100%,0,0,0.8) -> p_rgba(80%,0,0,0.8) When composited onto the <span> intermediate canvas (using simple alpha blend - sab[]): sab[p_rgba(80%,0,0,0.8), p_rgba(0,0,0,0)] -> p_rgba(80%,0,0,1-(1-0)(1-0.8)) -> p_rgba(80%,0,0,0.8) When 'opacity' of 0.7 is used: p_rgba(80%*0.7,0,0,0.8*0.7) -> p_rgba(56%,0,0,0.56) When combined with the blue background of the parent: sab[p_rgba(56%,0,0,0.56), p_rgba(0,0,100%,1)] -> p_rgba(56%,0,100%*(1-0.56),1-(1-0.56)(1-1)) -> p_rgba(56%,0,44%,1) The background before compositing onto <span> intermedia canvas is: yellow -> rgba(100%,100%,0) -> p_rgba(100%,100%,0,1) And is the same when painted onto the intermediate canvas. When combined with the 'opacity' of 0.7 it becomes: p_rgba(100%*0.7,100%*0.7,0,1*0.7) -> p_rgba(70%,70%,0,0.7) Which is then combined onto the blue background: sab[p_rgba(70%,70%,0,0.7), p_rgba(0,0,100%,1)] -> p_rgba(70%,70%,100%*(1-0.7),1-(1-0.7)(1-1) -> p_rgba(70%,70%,30%) Finally the text when combined onto the already yellow intermediate canvas becomes: sab[p_rgba(80%,0,0,0.8), p_rgba(100%,100%,0,1)] -> p_rgba(80%+(1-0.8)*100%,(1-0.8)*100%,0,1-(1-0.8)(1-1)] -> p_rgba(100%,20%,0,1) Combined with 'opacity' of 0.7: p_rgba(100%*0.7,20%*0.7,0,0.7) -> p_rgba(70%,14%,0,0.7) When combined onto the parent's blue background: sab[p_rgba(70%,14%,0,0.7), p_rgba(0,0,100%,1)] -> p_rgba(70%,14%,100%*(1-0.7),1-(1-0.7)(1-1)) -> p_rgba(70%,14%,30%,1) Regards, - Jacob [1] http://www.w3.org/TR/2003/CR-css3-color-20030506 [2] http://www.w3.org/TR/SVG11
Received on Monday, 28 July 2003 14:21:38 UTC