ColorTransform | RGB, Hex and random colors | Actionscript Color Tutorial

Overview

Color can sometimes make or break your design. I’ve put together this flash to show how to set a movieclip to a certain color, I’ve had to do this at runtime and had to go by different values such as a hex number, rgb values and have even wanted to just set a random color, so this example does them all! It’s even nice for translating a Hexadecimal color into RGB color.

Flash uses a Transform object to control certain properties of movie clips. To set color we need to use a Transform object as well as a ColorTransform object. ColorTransform objets are used to, you guessed it, tell the Transform object what color we want to set our clip to. It was a little unintuitive for me to learn, but now it makes sense, or at least enough sense to use.

I’ve made a function that does all this for you. You just send it the movieClip reference and a color.

setColor(myMovieClip, myColor)

There are functions to convert rgb values to a hex value, and from a hex value to red, blue and green values as well.

To make a random hexadecimal number Math.random() * 16777216 (the total number of hexadecimal numbers)

Steps

  1. Imports
    import flash.geom.ColorTransform;
    import flash.geom.Transform;
  2. Make a Transform object
    var myTransform:Transform = new Transform(item);
  3. Make a ColorTransform object
    var myColorTransform:ColorTransform = new ColorTransform();
  4. Set the rgb color of the ColorTransfrorm object
    myColorTransform.rgb = myColor;
  5. Set the colorTransform property of the Transform object to your ColorTransform object
    myTransform.colorTransform = myColorTransform;

Flash Color App

Get Adobe Flash player

Source Actionscript (as2)

//method to set a specified movieClip(item:movidClip) to a specified color(col:hex value number)
function setColor(item, col) {
  //make transform object and send the specified movieClip to it
  var myTransform:Transform = new Transform(item);
  //make colorTransform
  var myColorTransform:ColorTransform = new ColorTransform();
  //check color bounds
  if (col > 16777215) col = 16777215;
  else if (col < 0) col = 0;
  //variable to hold the color value
  var myColor:Number = col;
  //set color through color transformation
  myColorTransform.rgb = myColor;
  myTransform.colorTransform = myColorTransform;

  trace("the hex number: 0x" + addZeros(myColorTransform.rgb.toString(16)));
  var rgbObject = hex2rgb(myColor);
  trace("the hex number in rgb format: "+rgbObject.r+", "+rgbObject.g+", "+rgbObject.b);
  trace("the hex number in decimal format: " + myColorTransform.rgb);
  displayColors(myColorTransform.rgb);
}

//bitwise conversion of rgb color to a hex value
function rgb2hex(r, g, b):Number {
    return(r<<16 | g<<8 | b);
}
//bitwise conversion of a hex color into rgb values
function hex2rgb (hex):Object{
    var red = hex>>16;
    var greenBlue = hex-(red<<16)
    var green = greenBlue>>8;
    var blue = greenBlue - (green << 8);
  //trace("r: " + red + " g: " + green + " b: " + blue);
    return({r:red, g:green, b:blue});
}

//BUTTONS
randomColor.onRelease = function() {
  //make random number (within hex number range)
  var theColor = Math.floor(Math.random() * 16777215);
  //set ball color to random color value
  setColor(colorBall.inner, theColor);
}
readHexColor.onRelease = function() {
  //convert 6 character input string into hex color format used by actionscript
  var theColor = "0x"+hexColorIn.text;
  //set ball color to hex color value
  setColor(colorBall.inner, theColor);
}
readRGBColor.onRelease = function() {
  //convert rgb values into hex value
  var theColor = rgb2hex(redColorIn.text, greenColorIn.text, blueColorIn.text);
  //set ball color to converted hex color value
  setColor(colorBall.inner, theColor);
}
readDecColor.onRelease = function() {
  //convert rgb values into hex value
  var theColor = decColorIn.text;
  //set ball color to converted hex color value
  setColor(colorBall.inner, theColor);
}

Open Source Download

color.zip (containing color.fla and color.swf)

This entry was posted in tutorial and tagged , , , , , , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

13 Comments

  1. Posted November 10, 2008 at 7:44 pm | Permalink

    This is great – need to convert this to as3 though. I assume it will largely be the same?

  2. ainhoitxu
    Posted November 13, 2008 at 7:22 am | Permalink

    I tried this code and it completely colors my movieclip. How do you keep the borders with their original color (in your case white)? In your example only the inside of the circle changes color, not the borders.

    Thanks!

  3. Posted November 13, 2008 at 11:10 am | Permalink

    @Phil – I haven’t messed with this in AS3 as of yet, but I will soon and I’ll be sure to post about it.

    @ainhoitxu – Simple really, in my example I have a movieclip containing two more clips, the inner part of the circle and the outline. Thay are seperate clips, and in the setColor(colorBall.inner, theColor); function I am sendning as an argument the colorBall.inner movieClip. I could also send in the colorBall.outline to change the color of the stroke, or like you have done and send in the whole clip as one. Make sense?

  4. ainhoitxu
    Posted November 13, 2008 at 6:49 pm | Permalink

    It does totally make sense! I am trying to do the same as you, color the inner part of an image with borders. I suppose there is no easier way to do it than having 2 different movieclips, right?

  5. Isaac
    Posted January 18, 2009 at 4:56 am | Permalink

    Is this really the bare minimum of what’s required to program a color change in flash? Basically… I have a movieclip in my library, and I have a command that will call that out and place it on stage, but for each time it’s loaded onto the stage, I want it to randomize its color. I’ve been trying to insert code to do this in the “function onLoad () { }” segment, but I don’t seem to understand how to get the colorTransform code to work on an already existing movie clip. I keep finding examples that involve creating objects from code…

  6. Posted March 18, 2009 at 11:09 pm | Permalink

    Isaac, this is the bare minimum to transform a movieclip with an instance name of “mymc”

    import flash.geom.ColorTransform;
    import flash.geom.Transform;

    var myTransform:Transform = new Transform(mymc);
    var myColorTransform:ColorTransform = new ColorTransform();
    myColorTransform.rgb = 0xFF0000;
    myTransform.colorTransform = myColorTransform;

  7. Posted April 1, 2009 at 8:44 pm | Permalink

    To my knowledge this is the only post that actually shows how to convert hex to RGB. Thank you very much. It works well for me.

  8. Gabriel
    Posted May 13, 2009 at 9:46 am | Permalink

    This is great, but I can’t make it work. I just needed a code which could transform separated R, G, and B values into one RGB value. But when I use your rgb2hex function and I give in 0xFF, 0xFF, 0xFF, then it fills my rectangle with red color instead of white.
    Do you know why this happens? (I use _ to make the code more readable, they’re not in my AS file.)
    colorBitmapData = new BitmapData(256, 256, false);

    for (var i=0; i<256; i++) { ___for (var j=0; j<256; j++) {
    ______hex = rgb2Hex(0xFF, 0xFF, 0xFF);
    ______rect = new Rectangle(j, i, 1, 1);
    ______colorBitmapData.fillRect(rect, hex);
    ___};
    };

    private function rgb2Hex(r, g, b):Number {
    ___return (r<<16 || g<<8 || b);
    };

    I’m actually trying to create a gradient filled box which has 2 black corners, 1 white corner and 1 corner with a specified color value. But I don’t seem to manage the colors good enough even for a solid fill…

  9. Gabriel
    Posted May 13, 2009 at 11:46 am | Permalink

    Alright, I was pretty stupid with this. I forgot to add the r, g, b values to each other to get the total RGB value…

  10. Posted May 18, 2009 at 3:02 pm | Permalink

    Hi… Really thanks… Evan , i don’t know what were developers of AS3 thinking when not puting a HEX conversor in the flash libraries… but you solve it, almost i reinvent the wheel… But you solved this commnon issue… thanks..

  11. Posted October 13, 2009 at 9:23 pm | Permalink

    Thanks Evan! This helped me out a lot.

  12. Jack
    Posted October 27, 2009 at 3:18 am | Permalink

    awesome Evan, Great Job!

  13. Rose
    Posted March 10, 2010 at 10:33 pm | Permalink

    I’m using AS2, but this will help me with randomly generating hex values. Thank you so much!

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Recent Posts

    Developing for old browsers is (almost) a thing of the past – (37signals)

    Basecamp announces that it’s new version will not support old browsers! They will of course continue to support them in their “classic” version. But this is good news and as more implement this type of policy the internet will be happy. It used to be one of the biggest pains of web development. Juggling different [...]

    Screen shot 2012-02-10 at 12.59.33 PM

    Vendor Prefixes – about to go south

    What are “standards” coming to? Who’s guilty? Apple and Chrome: They’re supporting vendor prefixed properties like they’re a standard part of development. Firefox, Opera and Internet Explorer: They should have been on the ball more. Need to push their evangelism further. Teach developers that it’s not exclusively -webkit to style elements. All the browsers: experimental [...]

    bio

    An Event Apart Notes: Ethan Marcotte, Responsive Web Design

    Ethan Marcotte has become the father of Responsive Web Design and spent this whole day focused on principles, techniques, gotchas, examples, … all about building and how to build responsive sites. With a sprinkle of mobile first. For Ethan, it all started with this article: http://www.alistapart.com/articles/dao/ Think of architecture, the whole design phase is established [...]

    Webcomm_Montreal

    An Event Apart Notes: Jared Spool, The Curious Properties of Intuitive Web Pages

    Senseless waste of asterisks… Avis used an asterisk to denote optional fields. This means that there is a lot of baggage that comes with an asterixk. Somewhere this symbol got meaning, it’s not in the bible! We can control when something goes from unintuitive to intuitive. A design is intuitive (although technically and grammatically speaking [...]

    untitled-158-2

    An Event Apart Notes: Marco Arment, Bridging the App Gap

    The iPhone changed our industry in 2007: first mobile to have a desktop class web browser and it made people start using their mobile phones as computers! All apps other than apple provided ones were web browser apps. Most of the first apps were branded web browsers. No real difference between using mobile site or [...]

    lukew_space

    An Event Apart Notes: Luke Wroblewski, Mobile to the Future

    MASS MEDIA (in waves) Print, Recordings, Cinema, Radio, Television, Internet, Mobile Mobile is the new Mass Media It certainly is mass and massive. More mobile devices (by far) every day than babies born on the planet. Mobile devices are eating into our personal computing shares. New waves of mobile media eat all previous media waves. [...]

    IMG_4500

    An Event Apart Notes: Josh Clark, Buttons are a Hack

    Mobile and touch should be revolutionizing design and user experience. We don’t want to touch a tiny link or button. Back button is just stupid. Fitz’s Law, make things fat proximal targets for easy touching. People are lazy, let’s as designers LET people be lazy! Maybe even use the whole screen as your control. Eliminate [...]

    nicole_pink_bkg_2012

    An Event Apart Notes: Nicole Sullivan, Our Best Practices are Killing Us

    Grep to for analyze css. CSS duplication is a web-wide problem. Started helping facebook optimize thier site and they had 1.9MB of css loading. The same color showing up hundreds of times. Many many color statements and declarations. !important declarations get dangerous. Sites found to have over 500 !important declarations! float is a serious problem [...]

    ericmeyer

    An Event Apart Notes: Eric Meyer, The Future of CSS

    Cormorant trained to fish for the fishermen. The fishermen tie bands around the birds necks that are. Fishermen fish at night, using lamps they attract bugs, which attract fish, and the cormorant get to fish but cant swallow them and the fishermen take the fish. Browser vendors are promising us new CSS tools, but don’t [...]

    sammyj

    An Event Apart Notes: Ethan Marcotte, Rolling Up Our Responsive Sleeves

    Henry Adams (Descendant of 2 presidents: great-grandson to John Adams and grandson to John Quincy Adams). He lived between the civil war and world war 1. He witnessed the industrial revolution. Chaos was the law of nature, Order was the dream of man Samuel Johnson – funniest man in the 17th Century… Responsive Design: 1. [...]

  • Recent Comments

    me-gamer

    me-gamer

    this is really nice. this made many of my task simple.
    Lori Newman

    Lori Newman

    Just wanted to thank you for your presentation. It was extremely informative and just what I...
    Karl

    Karl

    I have been using for some time this nice Banner, from developer FX. They have a really nice Live...
    Karl

    Karl

    Thank you for this wonderful link… recommend it! Fast, simple, easy… :-)
    Gabriel

    Gabriel

    Hi Valerie, I don’t know if you are still following this post, but I tried seeing if it is...
    avinash

    avinash

    Hi Evan, I am using the same code and trying it on chrome/firefox it is not working on neither...