Converting and formatting colors

by Peter deHaan on August 13, 2007

in ActionScript, Color, ColorPicker, HEX, RGB

Here’s a quick post on converting some colors from strings to integers, and splitting colors into separate red/green/blue values, and formatting colors using Flex.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/08/13/converting-and-formatting-colors/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            private function fixedInt(value:int, mask:String):String {
                return String(mask + value.toString(16)).substr(-mask.length).toUpperCase();
            }

            private function rChannel(value:int):int {
                return value >> 16 & 0xFF;
            }

            private function gChannel(value:int):int {
                return value >> 8 & 0xFF;
            }

            private function bChannel(value:int):int {
                return value >> 0 & 0xFF;
            }

            private function rgbToInt(r:int, g:int, b:int):int {
                return r << 16 | g << 8 | b << 0;
            }
        ]]>
    </mx:Script>

    <mx:Model id="colorObj">
        <root>
            <color>{colorPicker.selectedColor}</color>
            <red>{rChannel(colorObj.color)}</red>
            <green>{gChannel(colorObj.color)}</green>
            <blue>{bChannel(colorObj.color)}</blue>
        </root>
    </mx:Model>

    <mx:Form>
        <mx:FormItem label="Color:" direction="horizontal">
            <mx:ColorPicker id="colorPicker" />
            <mx:Label text="0x{fixedInt(colorPicker.selectedColor, '000000')}" width="100" />
        </mx:FormItem>
        <mx:FormItem label="Red:" direction="horizontal">
            <mx:Label text="{colorObj.red}" />
            <mx:Label text="(0x{fixedInt(colorObj.red, '00')})" />
        </mx:FormItem>
        <mx:FormItem label="Green:" direction="horizontal">
            <mx:Label text="{colorObj.green}" />
            <mx:Label text="(0x{fixedInt(colorObj.green, '00')})" />
        </mx:FormItem>
        <mx:FormItem label="Blue:" direction="horizontal">
            <mx:Label text="{colorObj.blue}" />
            <mx:Label text="(0x{fixedInt(colorObj.blue, '00')})" />
        </mx:FormItem>
        <mx:FormItem label="Color:" direction="horizontal">
            <mx:Label text="{colorObj.color}" />
            <mx:Label text="(0x{fixedInt(rgbToInt(colorObj.red, colorObj.green, colorObj.blue), '000000')})" />
        </mx:FormItem>
    </mx:Form>

    <mx:Label text="{int(0xFF00FF)}" />

</mx:Application>

View source is enabled in the following example.

{ 4 comments… read them below or add one }

1 peterd August 13, 2007 at 10:40 pm

Here are a few more methods:

/* Convert r/g/b values (255,0,255) to a fixed string ('FF00FF'). */
private function rgbToStr(r:int, g:int, b:int):String {
    return fixedInt(rgbToInt(r, g, b), "000000");
}

/* Convert a string ('0xFF00FF') to an integer (16711935). */
private function strToInt(value:String):int {
    return int(value);
}

/* Convert a string ('0xFF00FF') to an object containing an 'r', 'g', and 'b' property. */
private function strToRGB(value:String):Object {
    var temp:int = strToInt(value);
    return {r:rChannel(temp), g:gChannel(temp), b:bChannel(temp)};
}

Reply

2 Gilles TASSE October 24, 2007 at 3:10 am

This is very good example.

Reply

3 Christoph February 20, 2008 at 5:46 am

Hi,

is there any way to set the selectedColor-property from a value fed in from an XML (=HTTPservice)? Tried with this,

and

but this just keeps me giving an error.

Thanks for your help!

Christoph

Reply

4 Tomas January 9, 2009 at 10:54 am

Thanks for the example. A very simple way to convert a string color to uint.

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can 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> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: