O'Reilly logo

Actionscript Cookbook by Joey Lott

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

3.2. Specifying RGB Values

Problem

You want to create an RGB value to use with setRGB( ) based on the red, green, and blue part values.

Solution

Use the bitshift left and bitwise OR operators.

Discussion

The easiest way to combine individual red, green, and blue components into a single RGB value is to use bitwise operations. Simply shift the red value left by 16 bits and the green value left by 8 bits, then combine them with the blue value using the bitwise OR operator, as follows:

red   = 100;
green = 100;
blue  = 100;
rgb = (red << 16) | (green << 8) | (blue);

// Create the Color object.
my_color = new Color(myMovieClip);

// Set the RGB color.
my_color.setRGB(rgb);

The bitshift left operator (<<) effectively multiplies a number by two for each bit position that the number is shifted (this is similar to how shifting a decimal number one decimal place to the left effectively multiplies it by 10). In this context, the bitwise OR operator (|) essentially concatenates the shifted numbers together. Therefore, assuming that red, green, and blue are each in the range of 0 to 255, the following:

rgb = (red << 16) | (green << 8) | (blue);

is equivalent to:

rgb = (red * Math.pow(2,16)) + (green * Math.pow(2,8)) + blue;

or:

rgb = (red * 65536) + (green * 256) + blue;

In practice, it is often easier to use Color.setTransform( )—in which the red, green, and blue components are specified as separate properties of a transform object—to alter the targeted clip’s color. Furthermore, setTransform( ) allows ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required