On 03/02/2010 9:38 AM, baptiste auguie wrote:
That makes perfect sense, thank you, except that I'm not sure where
the white comes from when I set the background to transparent?

You'd have to check the png device documentation or source code to find out what it does when you mix half red with half transparent. When I view a .png file in the default viewer in Windows 7, setting the background to transparent displays it as white, I don't see the things behind the window showing through. I don't know if it's the viewer or the file determining that.

Duncan Murdoch
png("testingOrder.png", bg = "transparent")
plot.new()
par(bg="transparent")
rect(0.3, 0.5, 1, 1, col=rgb(1, 0, 0, alpha=0.5))
rect(0, 0.5, 0.7, 1, col=rgb(0, 0, 1, alpha=0.5))

rect(0, 0, 0.7, 0.5, col=rgb(0, 0, 1, alpha=0.5))
rect(0.3, 0, 1, 0.5, col=rgb(1, 0, 0, alpha=0.5))

dev.off()

Still produces two different overlap colours, although I *think* only
two colours are involved. What I have I missed here?

Thanks,

baptiste


On 3 February 2010 15:17, Duncan Murdoch <murd...@stats.uwo.ca> wrote:
> On 03/02/2010 8:50 AM, Ken Knoblauch wrote:
>>
>> baptiste auguie <baptiste.auguie <at> googlemail.com> writes:
>>>
>>> Adding two semi-transparent colours results in non-intuitive colour
>>> mixing (a mystery for me anyway). Is it additive (light), substractive
>>> (paint), or something else? Consider the following example, depending
>>> on the order of the two "layers" the overlap region is either purple
>>> or dark red. I have no idea why.
>>>
>>> png("testingOrder.png")
>>> plot.new()
>>>
>>> # Red below
>>> rect(0.3, 0.5, 1, 1, col=rgb(1, 0, 0, alpha=0.5))
>>> rect(0, 0.5, 0.7, 1, col=rgb(0, 0, 1, alpha=0.5))
>>>
>>> # Blue below
>>> rect(0, 0, 0.7, 0.5, col=rgb(0, 0, 1, alpha=0.5))
>>> rect(0.3, 0, 1, 0.5, col=rgb(1, 0, 0, alpha=0.5))
>
> I think it's a fairly simple calculation.  In the first example: We are
> writing red (1,0,0) at alpha=0.5 onto white (1,1,1), so we get a mixture of
> half existing and half new, i.e. (1,0.5,0.5).  Then we write blue (0,0,1) at
> alpha 0.5 onto that, giving (0.5, 0.25, 0.75).
>
> In the second pair, the first write yields (0.5,0.5,1), and the second
> yields (0.75, 0.25, 0.5).
>
> So this is like mixing paints:  you don't get the same colour if you mix
> equal parts red and white, then take equal parts of that mixture with blue,
> as you get if you put the blue in first.  You've got less red in the first
> mixture than in the second.
>
> You would get the same color in both mixtures if you didn't mix the white
> in:
>
> # Red below
> rect(0.3, 0.5, 1, 1, col=rgb(1, 0, 0, alpha=1))
> rect(0, 0.5, 0.7, 1, col=rgb(0, 0, 1, alpha=0.5))
>
> # Blue below
> rect(0, 0, 0.7, 0.5, col=rgb(0, 0, 1, alpha=1))
> rect(0.3, 0, 1, 0.5, col=rgb(1, 0, 0, alpha=0.5))
>
>
> Duncan Murdoch
>
>>>
>>> dev.off()
>>
>> I would expect overlaid transparencies to act like filters and
>> multiply, producing so-called subtractive color mixing,
>> so blue and yellow gives green.  Interestingly, however,
>> overlaying filters is not necessarily a commutative operation, since a
>> transparent filter can yield an
>> additive component (through scatter, for example)
>> though I suspect that the non-commutativity comes
>> about in R because these rules apply to physical lights,
>> filters and surfaces and in R, it is some uncalibrated combination
>> of frame buffer values that is being used.
>>>
>>> Best,
>>>
>>> baptiste
>>>
>>
>> Ken
>>
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to