Expressions/Scripts/Presets

Moderators: Disciple, zlovatt

mienda
Topic Author
Posts: 5
Joined: Sat Nov 06, 2010 4:40 am

### How rgbToHsl really works ?

Hi I spent lot of time to get luma value from a rgb color.
I get my reference value for HSL in the info panel, I just have to put the mouse on the right color.
for example:
if the rgb color is a gray at 30% (0.3020 , 0.3020 , 0.3020) in decimal.
the results of this expression is:
rgbToHsl(0.3020 , 0.3020 , 0.3020)[2] = 30 (it's ok)
But it doesn't work for this pure red color (1,0,0) luma should be at 100%.
rgbToHsl(1 , 0 , 0)[2] = 50
same for this
rgbToHsl(0 , 0.75 , 0)[2] = 37 (should be 75%)

So I tried an other way:
Math.round ((Math.max(rgb[0],rgb[1],rgb[2]) + Math.min(rgb[0],rgb[1],rgb[2]) /2)*100)

This time a get the right luma value if I choose a color sample but a wrong result for a grayscale sample !

What do you think ?
I want the expression on a text layer to make a kind of color picker to show only the luma. It's quite simple but I want it reliable.

Dan Ebberts
Posts: 319
Joined: Sat Jun 26, 2004 10:01 am
Location: Folsom, CA
Contact:

### Re: How rgbToHsl really works ?

I think the luma/lightness channel is defined to be the average of the largest and smallest color channels. So pure red, blue or green would be 0.5 and white would be 1.0, etc.

Dan

mienda
Topic Author
Posts: 5
Joined: Sat Nov 06, 2010 4:40 am

### Re: How rgbToHsl really works ?

Hi Dan,
You right, so I tried an other operation.
This one is ok only for a pure red sample:

L0= Math.round ( (Math.max(rgb[0],rgb[1],rgb[2]) + Math.min(rgb[0],rgb[1],rgb[2]) /2)*100)

And these one give me the same good result but only on a grayscale sample!

L1= Math.round(50*(Math.max(rgb[0],rgb[1],rgb[2]) + Math.min(rgb[0],rgb[1],rgb[2])))
L2= Math.round((hsla[2])*100);

Obviously I missed something, Do you think I have to write a condition ? (if a RGB channel = 0 for ex)
Or the problem is in the operation to get the average between channel max and channel mini.

Thank's again.

Dan Ebberts
Posts: 319
Joined: Sat Jun 26, 2004 10:01 am
Location: Folsom, CA
Contact:

### Re: How rgbToHsl really works ?

I'm not sure exactly what you're after, but I ran a quick test, and this slider expression always gives me 0.00 no matter what color I choose for the Fill effect:

c = effect("Fill")("Color");
L1 = rgbToHsl(c)[2];
L2 = (Math.max(c[0],c[1],c[2]) + Math.min(c[0],c[1],c[2]))/2

L2 - L1

What version of AE are you using? As I recall, Math.min() and Math.max() didn't use to work correctly with more than two arguments.

Dan

mienda
Topic Author
Posts: 5
Joined: Sat Nov 06, 2010 4:40 am

### Re: How rgbToHsl really works ?

Hi Dan,
I think it works now.
You can find below the project, I use AE cs6 (in french) but I think it's ok for the expressions.

I use a lot the color picker for color grading cell Animation to match perfectly with the backgrounds.
And often everything is pre-composed so to have an "external" color picker is very useful.

Thank's again
Attachments
Colorpicker.zip
Colorpicker RGB and TSL