home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 November / Chip_2003-11_cd1.bin / software / dave / dqsd.exe / searches / rgb.xml < prev    next >
Text File  |  2002-12-14  |  6KB  |  177 lines

  1. <search function="rgb">
  2.   <name>RGB to Hexadecimal Conversion</name>
  3.   <description>
  4.     Convert RGB integer values to hexadecimal equivalents and vice versa.<br/>
  5.     <div class="helpboxDescLabels">Examples:</div>
  6.     <table class="helpboxDescTable">
  7.           <tr><td>rgb 255110053</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
  8.           <tr><td>rgb 255 110 53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
  9.           <tr><td>rgb 255,110,53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
  10.           <tr><td>rgb 255.110.53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
  11.           <tr><td>rgb 336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
  12.           <tr><td>rgb #336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
  13.           <tr><td>rgb 0x336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
  14.       </table>
  15.   </description>
  16.   <category>Functions</category>
  17.   <contributor>Monty Scroggins, Brent Beardsley</contributor>
  18.   
  19.   <script><![CDATA[
  20.     function rgb(q) 
  21.     {
  22.       if (nullArgs("rgb",q))
  23.         return false;
  24.  
  25.       var red = -1;
  26.       var grn = -1;
  27.       var blu = -1;
  28.  
  29.       if ( (r = q.match(/^\s*(\d{3})(\d{3})(\d{3})\s*$/)) != null) {
  30.         // specified in decimal
  31.         red = parseInt(r[1], 10);
  32.         grn = parseInt(r[2], 10);
  33.         blu = parseInt(r[3], 10);
  34.       } else if ( (r = q.match(/^\s*(\#|0x)?([\dA-Fa-f]{2})([\dA-Fa-f]{2})([\dA-Fa-f]{2})\s*$/)) != null) {
  35.         // specified in hex
  36.         // r[1] is the hex prefix
  37.         red = parseInt(r[2], 16);
  38.         grn = parseInt(r[3], 16);
  39.         blu = parseInt(r[4], 16);
  40.       } else if ( (r = q.match(/^\s*(\d+)\W+(\d+)\W+(\d+)\s*$/)) != null) {
  41.         // specified in decimal separated by non-digits
  42.         red = parseInt(r[1], 10);
  43.         grn = parseInt(r[2], 10);
  44.         blu = parseInt(r[3], 10);
  45.       } else {
  46.         // unknown format - show help
  47.         nullArgs("rgb", "?");
  48.         return false;
  49.       }
  50.       if (red < 0 || red > 255 || grn < 0 || grn > 255 || blu < 0 || blu > 255) {
  51.         // invalid rgb values
  52.         alert("Red Green and Blue values must be between 0 and 255\nwith leading zeros if needed.\nex - 255034101 = r255 g034 b101");
  53.         return false;
  54.       }
  55.  
  56.       var hsl = rgb_to_hsl(red, grn, blu);
  57.       var rgbString = "RGB: "+red + " " + grn + " " + blu;
  58.       var hexString = "Hex: "+
  59.                       ((red < 16) ? "0" : "") + red.toString(16).toUpperCase() + 
  60.                       ((grn < 16) ? "0" : "") + grn.toString(16).toUpperCase() + 
  61.                       ((blu < 16) ? "0" : "") + blu.toString(16).toUpperCase();
  62.       var hslString = "HSL: "+ hsl[0] + " "+hsl[1]+" "+hsl[2];
  63.       setSearchWindowText(rgbString+"  "+hexString+"  "+hslString);
  64.     }
  65.  
  66.      // hsl functions adapted from http://support.microsoft.com/default.aspx?scid=KB;en-us;q29240
  67.      // Brent Beardsley 4 Dec 2002
  68.     function rgb_to_hsl(r, g, b)
  69.     {
  70.       var HSLMAX = 255;
  71.       var RGBMAX = 255;
  72.  
  73.        var h = -1.0;
  74.       var s = -1.0;
  75.       var l = -1.0;
  76.  
  77.       var max = Math.max(Math.max(r,g), b);
  78.       var min = Math.min(Math.min(r,g), b);
  79.       var delta = max-min;
  80.  
  81.       l = Math.round( (max+min)*HSLMAX / (2*RGBMAX) );
  82.       if (max == min) {
  83.         s = 0.0;
  84.         h = NaN;
  85.       } else {
  86.         if (l <= Math.floor(HSLMAX/2)) {
  87.           s = Math.round((delta*HSLMAX) / (max+min));
  88.         } else {
  89.           s = Math.round((delta*HSLMAX) / (2*RGBMAX-max-min));
  90.         }
  91.         var rdelta = Math.round((max-r)*Math.floor(HSLMAX/6) / delta);
  92.         var gdelta = Math.round((max-g)*Math.floor(HSLMAX/6) / delta);
  93.         var bdelta = Math.round((max-b)*Math.floor(HSLMAX/6) / delta);
  94.  
  95.         if (r == max) {
  96.           h = bdelta - gdelta;
  97.         } else if (g == max) {
  98.           h = Math.floor(HSLMAX/3) + rdelta - bdelta;
  99.         } else {
  100.           h = Math.floor((2*HSLMAX)/3) + gdelta - rdelta;
  101.         }
  102.         if (h < 0) {
  103.           h += HSLMAX;
  104.         } else if (h > HSLMAX) {
  105.           h -= HSLMAX;
  106.         }
  107.       }
  108. //      alert("h: "+h+", s: "+s+", l: "+l);
  109.       return new Array(Math.round(h), Math.round(s), Math.round(l));
  110.     }
  111.  
  112.     function hue_to_rgb(n1, n2, hue)
  113.     {
  114.       var HSLMAX = 255;
  115.       var RGBMAX = 255;
  116.  
  117.       if (hue < 0) 
  118.         hue += HSLMAX;
  119.  
  120.       if (hue > HSLMAX)
  121.         hue -= HSLMAX;
  122.  
  123.       if (hue < Math.floor(HSLMAX/6)) {
  124. //        alert("hue_to_rgb: 1");
  125.         return ( n1 + Math.round( (n2-n1)*hue/Math.floor(HSLMAX/6)));
  126.       } else if (hue < Math.floor(HSLMAX/2)) {
  127. //        alert("hue_to_rgb: 2");
  128.         return n2;
  129.       } else if (hue < Math.floor((HSLMAX*2)/3)) {
  130. //        alert("hue_to_rgb: 3");
  131.         return ( n1 + Math.round((n2-n1)*(((HSLMAX*2)/3)-hue)/Math.floor(HSLMAX/6)) );
  132.       } else {
  133. //        alert("hue_to_rgb: 4");
  134.         return n1;
  135.       }
  136.     }
  137.  
  138.     function hsl_to_rgb(h, s, l)
  139.     { 
  140.       var HSLMAX = 255;
  141.       var RGBMAX = 255;
  142.     
  143.       var r = NaN;
  144.       var g = NaN;
  145.       var b = NaN;
  146.       var magic1 = NaN;
  147.       var magic2 = NaN;
  148.  
  149.       if (s == 0) {
  150.         r = (l*RGBMAX)/HSLMAX;
  151.         g = (l*RGBMAX)/HSLMAX;
  152.         b = (l*RGBMAX)/HSLMAX;
  153.       } else {
  154.         if (l <= Math.floor(HSLMAX/2)) {
  155.           magic2 = Math.round(l*(HSLMAX + s) / HSLMAX);
  156.         } else {
  157.           magic2 = l+s - Math.round((l*s)/HSLMAX);
  158.         }
  159.         magic1 = 2*l-magic2;
  160.  
  161.         r = Math.round(hue_to_rgb(magic1, magic2, h+Math.floor(HSLMAX/3))*RGBMAX/HSLMAX);
  162.         g = Math.round(hue_to_rgb(magic1, magic2, h)*RGBMAX/HSLMAX);
  163.         b = Math.round(hue_to_rgb(magic1, magic2, h-Math.floor(HSLMAX/3))*RGBMAX/HSLMAX);
  164.  
  165.       }
  166. //      alert("r: "+r+", g: "+g+", b: "+b);
  167.       return new Array(r,g,b);
  168.     }
  169.   ]]></script>
  170.  
  171.   <copyright>
  172.     Copyright (c) 2002 David Bau
  173.     Distributed under the terms of the
  174.     GNU Public License, Version 2 (http://www.gnu.org/copyleft/gpl.txt)
  175.   </copyright>
  176. </search>
  177.