{"id":273,"date":"2008-05-21T04:45:55","date_gmt":"2008-05-21T09:45:55","guid":{"rendered":"http:\/\/www.pixelwit.com\/blog\/?p=273"},"modified":"2009-08-14T20:04:40","modified_gmt":"2009-08-15T01:04:40","slug":"color-fading-array","status":"publish","type":"post","link":"https:\/\/www.pixelwit.com\/blog\/2008\/05\/21\/color-fading-array\/","title":{"rendered":"Hexadecimal Color Fading Array"},"content":{"rendered":"\n<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t\t\tid=\"fm_fade-hexes_725018179\"\n\t\t\tclass=\"flashmovie\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"400\">\n\t<param name=\"movie\" value=\"https:\/\/www.pixelwit.com\/blog\/wp-content\/uploads\/2008\/05\/fade-hexes.swf\" \/>\n\t<!--[if !IE]>-->\n\t<object\ttype=\"application\/x-shockwave-flash\"\n\t\t\tdata=\"https:\/\/www.pixelwit.com\/blog\/wp-content\/uploads\/2008\/05\/fade-hexes.swf\"\n\t\t\tname=\"fm_fade-hexes_725018179\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"400\">\n\t<!--<![endif]-->\n\t\t\n\t<!--[if !IE]>-->\n\t<\/object>\n\t<!--<![endif]-->\n<\/object>\n<p>A while ago I wrote a <a title=\"How to Fade Between 2 Colors\" href=\"https:\/\/www.pixelwit.com\/blog\/2007\/05\/hexadecimal-color-fading\/\">Hexadecimal Color Fading Tutorial<\/a> explaining how to select a single color at any point on a gradient between two specified colors.  In that tutorial there was a function which efficiently broke each of the 2 specified colors into their Red, Green and Blue components and then calculated a single new color at a specified point between them.<\/p>\n<p>Here's what the code looks like:<!--more--><\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"actionscript codecolorer\"><span class=\"kw2\">function<\/span> fadeHex <span class=\"br0\">&#40;<\/span>hex, hex2, ratio<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> r = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> g = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> b = hex <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; r += <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span>-r<span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; g += <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-g<span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; b += <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-b<span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span><span class=\"br0\">&#40;<\/span>r<span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">16<\/span> <span class=\"sy0\">|<\/span> g<span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">8<\/span> <span class=\"sy0\">|<\/span> b<span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Approximately 80% of the above code is dedicated to breaking the \"hex\" and \"hex2\" hexadecimal colors into their RGB components.  Repeatedly calling the above function with the same \"hex1\" and \"hex2\" values can be wasteful because the the RGB values are constantly being recalculated and disposed of rather than being stored in variables for quick retrieval.<\/p>\n<p>If you want to create a gradient with a lot of steps or if you want to store your results in an array, you should consider an alternative approach.  The following code <strong>efficiently<\/strong> creates a gradient of colors between 2 initial hexadecimal values and stores the results in an array.<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Returns an array of colors between and including Hex1 and Hex2.<\/span><br \/>\n<span class=\"kw2\">function<\/span> fadeHex <span class=\"br0\">&#40;<\/span>hex1, hex2, steps<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Create an array to store all colors.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> newArry = <span class=\"br0\">&#91;<\/span>hex1<span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Break Hex1 into RGB components.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> r = hex1 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> g = hex1 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> b = hex1 <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Determine RGB differences between Hex1 and Hex2.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> rd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span>-r;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> gd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-g;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> bd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-b;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; steps++;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ For each new color.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">1<\/span>; i<span class=\"sy0\">&lt;<\/span>steps; i++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Determine where the color lies between the 2 end colors.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> ratio = i<span class=\"sy0\">\/<\/span>steps;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Calculate new color and add it to the array.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>r+rd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">16<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>g+gd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">8<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>b+bd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Add Hex2 to the array and return it.<\/span><br \/>\n&nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span>hex2<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> newArry;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Store a gradient in an array.<\/span><br \/>\n<span class=\"kw2\">var<\/span> gradientArray = fadeHex<span class=\"br0\">&#40;<\/span>0x000000, 0xFFFFFF, <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Show the contents of the array.<\/span><br \/>\n<span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>gradientArray.<span class=\"kw3\">length<\/span>; i++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">trace<\/span><span class=\"br0\">&#40;<\/span>gradientArray<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span>.<span class=\"kw3\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/ Traces: 0, 555555, aaaaaa, and ffffff.<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>That's pretty slick.  <strong>But<\/strong>... What if I want to fade between 3 colors?  Or 4 colors?  Or 6?  Calling the above function multiple times might work but it's wasteful for reasons similar to those mentioned in our first code example.<\/p>\n<p>Once again we can improve performance by consolidating multiple function calls into one streamlined function.  The tricky part is finding a way to provide arguments to our function in a manner that's both flexible and convenient.<\/p>\n<p>Take a look at the following block of code:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ &quot;FadeHexes&quot; accepts an array of hexadecimal values separated by numbers which<\/span><br \/>\n<span class=\"co1\">\/\/ specify how many colors are to be generated between hexadecimal values.<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ For example:<\/span><br \/>\n<span class=\"co1\">\/\/ [0xFF0000, &nbsp; 1, &nbsp; 0x000000, &nbsp; 3, &nbsp; 0xFFFFFF]<\/span><br \/>\n<span class=\"co1\">\/\/ [ &nbsp; &nbsp; Red, &nbsp; 1, &nbsp; &nbsp; &nbsp;Black, &nbsp; 3, &nbsp; &nbsp; &nbsp;White]<\/span><br \/>\n<span class=\"co1\">\/\/ would produce:<\/span><br \/>\n<span class=\"co1\">\/\/ [0xFF0000, &nbsp; 0x7F0000, &nbsp; 0x000000, &nbsp; &nbsp;0x3F3F3F, &nbsp; &nbsp; &nbsp;0x7F7F7F, &nbsp; &nbsp; 0xbFbFbF, &nbsp;0xFFFFFF].<\/span><br \/>\n<span class=\"co1\">\/\/ [ &nbsp; &nbsp; Red, &nbsp; Burgundy, &nbsp; &nbsp; &nbsp;Black, &nbsp; DARK-Gray, &nbsp; MIDDLE-Gray, &nbsp; LIGHT-Gray, &nbsp; &nbsp; White].<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> fadeHexes <span class=\"br0\">&#40;<\/span>arry<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Note the length of our array.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> len = arry.<span class=\"me1\">length<\/span>-<span class=\"nu0\">1<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Create an array to store all colors.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> newArry = <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ For every pair of colors.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>len; i+=<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Note the color pair.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> hex = arry<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> hex2 = arry<span class=\"br0\">&#91;<\/span>i+<span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Add the first color to the array.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span>hex<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Break the first color into RGB components.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> r = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> g = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> b = hex <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Determine RGB differences between the first and second colors.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> rd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span>-r;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> gd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-g;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> bd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-b;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Retrieve number of new colors between first and second color.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> steps = arry<span class=\"br0\">&#91;<\/span>i+<span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>+<span class=\"nu0\">1<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ For each new color.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> j=<span class=\"nu0\">1<\/span>; j<span class=\"sy0\">&lt;<\/span>steps; j++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Determine where the color lies between the 2 end colors.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> ratio = j<span class=\"sy0\">\/<\/span>steps;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Determine RGB values, combine into 1 hex color and add it to the array.<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>r+rd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">16<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>g+gd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">8<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>b+bd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Add the last color to the end of the array.<\/span><br \/>\n&nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span>arry<span class=\"br0\">&#91;<\/span>len<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Return the new array of colors.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> newArry;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Store a gradient in an array.<\/span><br \/>\n<span class=\"kw2\">var<\/span> gradientArray = fadeHexes<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#91;<\/span>0xFF0000, &nbsp; <span class=\"nu0\">1<\/span>, &nbsp; 0x000000, &nbsp; <span class=\"nu0\">3<\/span>, &nbsp; 0xFFFFFF<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Show the contents of the array.<\/span><br \/>\n<span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>gradientArray.<span class=\"kw3\">length<\/span>; i++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">trace<\/span><span class=\"br0\">&#40;<\/span>gradientArray<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span>.<span class=\"kw3\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Traces: ff0000, 7f0000, 0, 3f3f3f, 7f7f7f, bfbfbf, and ffffff.<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>Now that's pretty handy!  The \"fadeHexes\" function lets you specify a gradient with any number of colors and any number of steps between each color.  Neato.<\/p>\n<p>If you're curious, the SWF at the top of this page was created with code similar to the following:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> fadeHexes <span class=\"br0\">&#40;<\/span>arry<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> len = arry.<span class=\"me1\">length<\/span>-<span class=\"nu0\">1<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> newArry = <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>len; i+=<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> hex = arry<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> hex2 = arry<span class=\"br0\">&#91;<\/span>i+<span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span>hex<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> r = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> g = hex <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> b = hex <span class=\"sy0\">&amp;<\/span> 0xFF;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> rd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span>-r;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> gd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-g;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> bd = <span class=\"br0\">&#40;<\/span>hex2 <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span>-b;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> steps = arry<span class=\"br0\">&#91;<\/span>i+<span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>+<span class=\"nu0\">1<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> j=<span class=\"nu0\">1<\/span>; j<span class=\"sy0\">&lt;<\/span>steps; j++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> ratio = j<span class=\"sy0\">\/<\/span>steps;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>r+rd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">16<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>g+gd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;&lt;<\/span><span class=\"nu0\">8<\/span> <span class=\"sy0\">|<\/span> <span class=\"br0\">&#40;<\/span>b+bd<span class=\"sy0\">*<\/span>ratio<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; newArry.<span class=\"kw3\">push<\/span><span class=\"br0\">&#40;<\/span>arry<span class=\"br0\">&#91;<\/span>len<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> newArry;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> fillScreen <span class=\"br0\">&#40;<\/span>hexColors<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> len = hexColors.<span class=\"kw3\">length<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> wi = <span class=\"kw3\">Stage<\/span>.<span class=\"kw3\">width<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> hiStep &nbsp;= <span class=\"kw3\">Stage<\/span>.<span class=\"kw3\">height<\/span><span class=\"sy0\">\/<\/span>len;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>len; i++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">beginFill<\/span><span class=\"br0\">&#40;<\/span>hexColors<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, i<span class=\"sy0\">*<\/span>hiStep<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, i<span class=\"sy0\">*<\/span>hiStep+hiStep<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>wi, i<span class=\"sy0\">*<\/span>hiStep+hiStep<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>wi, i<span class=\"sy0\">*<\/span>hiStep<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, i<span class=\"sy0\">*<\/span>hiStep<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">endFill<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> drawCircles <span class=\"br0\">&#40;<\/span>hexColors<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> len = fadedColors.<span class=\"kw3\">length<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> around = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> outside = <span class=\"nu0\">20<\/span>+<span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">150<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> inside = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">100<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">var<\/span> i=<span class=\"nu0\">0<\/span>; i<span class=\"sy0\">&lt;<\/span>len; i++<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> r = i<span class=\"sy0\">\/<\/span>len;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">256<\/span>-r<span class=\"sy0\">*<\/span><span class=\"nu0\">256<\/span>, fadedColors<span class=\"br0\">&#91;<\/span>i<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> arou = i<span class=\"sy0\">*<\/span>around<span class=\"sy0\">*<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">*<\/span><span class=\"kw3\">Math<\/span>.<span class=\"kw3\">PI<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> awa = inside+outside<span class=\"sy0\">*<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>-r<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> xx = <span class=\"kw3\">Stage<\/span>.<span class=\"kw3\">width<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span> + <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">cos<\/span><span class=\"br0\">&#40;<\/span>arou<span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>awa;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> yy = <span class=\"kw3\">Stage<\/span>.<span class=\"kw3\">height<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span> + <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">sin<\/span><span class=\"br0\">&#40;<\/span>arou<span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>awa;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>xx, yy<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>xx+.5, yy<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> drawStuff<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> color1 = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>0xFFFFFF;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> gap1 = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">floor<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">50<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> color2 = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>0xFFFFFF;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> gap2 = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">floor<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw2\">var<\/span> color3 = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">random<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>0xFFFFFF;<br \/>\n&nbsp; &nbsp; fadedColors = fadeHexes<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#91;<\/span>color1, gap1, color2, gap2, color3<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; fillScreen <span class=\"br0\">&#40;<\/span>fadedColors<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; drawCircles <span class=\"br0\">&#40;<\/span>fadedColors<span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">Stage<\/span>.<span class=\"kw3\">align<\/span> = <span class=\"st0\">&quot;TL&quot;<\/span>;<br \/>\ndrawStuff<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"kw3\">setInterval<\/span><span class=\"br0\">&#40;<\/span>drawStuff, <span class=\"nu0\">3000<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>If you like the spiraling circles you can read more about spirals in my <a title=\"Drawing a Logarithmic Spiral\" href=\"https:\/\/www.pixelwit.com\/blog\/2008\/05\/how-to-draw-logarithmic-spiral\/\">Logarithmic<\/a> and <a title=\"Drawing an Archimedean Spiral\" href=\"https:\/\/www.pixelwit.com\/blog\/2008\/04\/how-to-draw-a-spiral\/\">Archimedean<\/a> spiral tutorials.<\/p>\n<p>I hope you find the code for generating color gradients as fun and useful as I did.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Detailed Flash ActionScript tutorial explaining how to fade between multiple colors and store each individual color of the gradient in an array.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[8],"tags":[23,42,46,45,36,37],"class_list":["post-273","post","type-post","status-publish","format-standard","hentry","category-flash","tag-actionscript","tag-code","tag-color","tag-draw","tag-swfs","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":0,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}