[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gimp-developer
Subject:    Re: [Gimp-developer] how layers actually get merged?
From:       "Joao S. O. Bueno Calligaris" <gwidion () mpc ! com ! br>
Date:       2004-09-21 13:42:18
Message-ID: 200409211042.18986.gwidion () mpc ! com ! br
[Download RAW message or body]

On Monday 20 September 2004 11:29, William Skaggs wrote:
> Bear wrote:
> > Assume there are four layers, all of which are in Normal mode and
> > grayscale. for a specific pixel in each layer,
> > Their intensity and alpha values(mapped to [0,1]) are
> > i1,a1
> > i2,a2
> > i3,a3
> > i4(background)
> >
> > the merged intensity is
> > ((i1*a1+i2*(1-a1))*a2+i3*(1-a2))*a3+i4*(1-a3) am I correct?
> > Thanks!
>
> I hope not.  The proper expression should be
>
> a1*i1 + (1-a1) * (a2*i2 + (1-a2) * (a3*i3 + (1-a3) * i4)).

Peering into the code, it is actually simpler than that. The GIMP 
always treat layers in groups of two, starting at the botton
It would do:
new_i3 = i3 * a3 + i4 * (1 - a3)
then:
new_i2 = i2 * a2 + new_i3 * (1 - a2)

and so on. The finalr esult is like above - but it is easier to think 
on it 2 layers at a time.

>
> That is, you have the expression reversed.  With your expression,
> the background could show through even with opaque layers above it.
>
> The best way to think about it is that the projection at layer n
> is given by the recursive formula
>
> P(n) = a_n * i_n + (1 - a_n) * P(n-1),
>
> where the background is layer 0, and P(0) = i_0.
>
> Best,
>   -- Bill
>
_______________________________________________
Gimp-developer mailing list
Gimp-developer@lists.xcf.berkeley.edu
http://lists.xcf.berkeley.edu/mailman/listinfo/gimp-developer
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic