On Oct 10, 2006, at 12:32 PM, David Bovill wrote:
Actually this is very useful. I won"t pretend I understand it all but at
least I've got a start.

Yeah, me too!

On 10/10/06, Dar Scott <[EMAIL PROTECTED]> wrote:
This will depend on the layers.  And remember to set the ink of the
group to something other than srcCopy.

A question here (have read below) is whether non-ink virgin controls so to speak as part of an "ink group" effect the behaviour in any way - that is say there are invisible or "out-of-the way". I would like to kow this so I can rule this cause out when trying to figure out why my group does not
behave as the simpler group did.

Naw, they all interact. They build up back to front. You might be doing something with a and b but if c, d and e are in the group, they will play. The group composition would be (a*b*c*d*e*group), where group is the image of the background of the group if it is opaque. So a will ink onto (b*c*d*e*group) is its blend & ink. Also the entire thing will ink onto what's behind the group based on the groups blend and ink.

To make it clear it doesn't just work on the object behind it, it works on all the objects behind it in that group. That is, by the time the ink for a is applied, (b*c*d*e*group) has already been created (conceptually).

acts as though adding
parentheses in image math.

OK. So imagine an "ink group" as if it were all by itself and ungrouped on a
card - then sort of burn it down into an image to figure out how it
interacts with other "ink groups". However when you"ve done the "maths" what
"ink would this "ink group" have?

It has the ink of the group itself.

That is a good point. Each time we think of x that is some control even a group, there is an x* that operates on something. So even though the P-D operators are binary functions when combined with the left parameter they can become unary operators.


In other words: what sort of beast is (a*b)?

This will act as though it is an image, it is layered in with other objects using the ink and blend for the group.

We can say (a*b) as a shortcut, but it is really (a*b*group) where group depends on properties such as opaque, border and so on. It might be completely transparent. In (a*b*group) the first * is the ink/blend of 'a' and the second * is the ink/blend of 'b'. The 3rd * in (a*b*group)*rest is the ink/blend of the group.

This is cool because one can work with the blend and ink of the group without knowing what is in it. (Except the alpha channel must be maintained, so srcCopy as an ink might be off limits.)

If the ink for 'b' is blendSrcOver and the group contribution is transparent, then (a*b*group) = (a*b). This is because of this characteristic:

    x <blendSrcOver> transparent = x.

That is, in math jargon, transparent is the right identity for <blendSrcOver>.


If I start with a group with no inks - lets call this (a-b) - where in my
case a is an image, b is a black graphic and they form a group.

You always have an ink.  The default ink is usually srcCopy.

Or am I o
the wrong path here?

  1. Now if b has the ink blendSrcOver how do I represent the ink

Ah, the earlier answer should help. Expanding (a*b*group) to show what ink is what:

    (a * b <blendSrcOver> group)

If group=transparent, then this is (a * b). From the right-identity characteristic noted above.

All of this ink algebra applies only when an ancestor has an alpha channel. So this does not apply if you leave the group without one and the card or other ancestor does not have one. I have noticed that new groups tend to have the ink of a recently created (deleted?) group, so watch that groups have the ink you expect. So, at this stage if the group still has an ink of srcCopy, then this might not apply.

  2. Then I add blendSrcOver to the group

    (a * b <blendSrcOver> group) <blendSrcOver> rest

  3. The I add blendSrcOver to the image a

    (a <blendSrcOver> b <blendSrcOver> group) <blendSrcOver> rest

If group=transparent then it is this:

    (a <blendSrcOver> b) <blendSrcOver> rest

I think <blendSrcOver> is associative and the parentheses can be removed. If so, then this is the same as this:

    a <blendSrcOver> b <blendSrcOver> rest

That is, as if there was no group.

However, that does not apply if the ink for a is blendSrcAtop. In that case you need to keep the parentheses:

    (a <blendSrcAtop> b) <blendSrcOver> rest

It is like gluing pictures and
cards onto a collage.  You work from back to front using the right
kind of glue for each layer.  The group means that you glue some
things together, put them in a clear envelope and then using the
right kind of glue for the group glue that to your collage.

Nice way of thiking about it. If you don"t mind I'll try and synthesize you
comments here and put them on the wiki.

Go for it. In some cases, the glue burns holes in your pictures, but that might be stretching beyond the limits of this analogy.

Note that I have mentioned algebraic properties several times here. Those properties are not quite the same with the clip-to-self (bug) versions of the operators. Those might have other interesting properties.

(Even though I don't like the clip-to-self variation as might be inferred from the scattered bug parenthetical comments, I'm sure I can adapt if the powers deem that they stay.)

Dar

--
**************************************
Dar Scott
Dar Scott Consulting  and  Dar's Lab
8637 Horacio Place NE
Albuquerque, NM 87111

Lab, office, home:  +1 505 299 9497
Fax:                call above first
Skype:              ask

http://www.swcp.com/dsc
[EMAIL PROTECTED]

Computer programming
**************************************


_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to