home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2003 November
/
Chip_2003-11_cd1.bin
/
software
/
dave
/
dqsd.exe
/
searches
/
rgb.xml
< prev
next >
Wrap
Text File
|
2002-12-14
|
6KB
|
177 lines
<search function="rgb">
<name>RGB to Hexadecimal Conversion</name>
<description>
Convert RGB integer values to hexadecimal equivalents and vice versa.<br/>
<div class="helpboxDescLabels">Examples:</div>
<table class="helpboxDescTable">
<tr><td>rgb 255110053</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
<tr><td>rgb 255 110 53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
<tr><td>rgb 255,110,53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
<tr><td>rgb 255.110.53</td><td> - </td><td>Convert decimal rgb number to hex</td></tr>
<tr><td>rgb 336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
<tr><td>rgb #336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
<tr><td>rgb 0x336666</td><td> - </td><td>Convert hex rgb number to decimal</td></tr>
</table>
</description>
<category>Functions</category>
<contributor>Monty Scroggins, Brent Beardsley</contributor>
<script><![CDATA[
function rgb(q)
{
if (nullArgs("rgb",q))
return false;
var red = -1;
var grn = -1;
var blu = -1;
if ( (r = q.match(/^\s*(\d{3})(\d{3})(\d{3})\s*$/)) != null) {
// specified in decimal
red = parseInt(r[1], 10);
grn = parseInt(r[2], 10);
blu = parseInt(r[3], 10);
} else if ( (r = q.match(/^\s*(\#|0x)?([\dA-Fa-f]{2})([\dA-Fa-f]{2})([\dA-Fa-f]{2})\s*$/)) != null) {
// specified in hex
// r[1] is the hex prefix
red = parseInt(r[2], 16);
grn = parseInt(r[3], 16);
blu = parseInt(r[4], 16);
} else if ( (r = q.match(/^\s*(\d+)\W+(\d+)\W+(\d+)\s*$/)) != null) {
// specified in decimal separated by non-digits
red = parseInt(r[1], 10);
grn = parseInt(r[2], 10);
blu = parseInt(r[3], 10);
} else {
// unknown format - show help
nullArgs("rgb", "?");
return false;
}
if (red < 0 || red > 255 || grn < 0 || grn > 255 || blu < 0 || blu > 255) {
// invalid rgb values
alert("Red Green and Blue values must be between 0 and 255\nwith leading zeros if needed.\nex - 255034101 = r255 g034 b101");
return false;
}
var hsl = rgb_to_hsl(red, grn, blu);
var rgbString = "RGB: "+red + " " + grn + " " + blu;
var hexString = "Hex: "+
((red < 16) ? "0" : "") + red.toString(16).toUpperCase() +
((grn < 16) ? "0" : "") + grn.toString(16).toUpperCase() +
((blu < 16) ? "0" : "") + blu.toString(16).toUpperCase();
var hslString = "HSL: "+ hsl[0] + " "+hsl[1]+" "+hsl[2];
setSearchWindowText(rgbString+" "+hexString+" "+hslString);
}
// hsl functions adapted from http://support.microsoft.com/default.aspx?scid=KB;en-us;q29240
// Brent Beardsley 4 Dec 2002
function rgb_to_hsl(r, g, b)
{
var HSLMAX = 255;
var RGBMAX = 255;
var h = -1.0;
var s = -1.0;
var l = -1.0;
var max = Math.max(Math.max(r,g), b);
var min = Math.min(Math.min(r,g), b);
var delta = max-min;
l = Math.round( (max+min)*HSLMAX / (2*RGBMAX) );
if (max == min) {
s = 0.0;
h = NaN;
} else {
if (l <= Math.floor(HSLMAX/2)) {
s = Math.round((delta*HSLMAX) / (max+min));
} else {
s = Math.round((delta*HSLMAX) / (2*RGBMAX-max-min));
}
var rdelta = Math.round((max-r)*Math.floor(HSLMAX/6) / delta);
var gdelta = Math.round((max-g)*Math.floor(HSLMAX/6) / delta);
var bdelta = Math.round((max-b)*Math.floor(HSLMAX/6) / delta);
if (r == max) {
h = bdelta - gdelta;
} else if (g == max) {
h = Math.floor(HSLMAX/3) + rdelta - bdelta;
} else {
h = Math.floor((2*HSLMAX)/3) + gdelta - rdelta;
}
if (h < 0) {
h += HSLMAX;
} else if (h > HSLMAX) {
h -= HSLMAX;
}
}
// alert("h: "+h+", s: "+s+", l: "+l);
return new Array(Math.round(h), Math.round(s), Math.round(l));
}
function hue_to_rgb(n1, n2, hue)
{
var HSLMAX = 255;
var RGBMAX = 255;
if (hue < 0)
hue += HSLMAX;
if (hue > HSLMAX)
hue -= HSLMAX;
if (hue < Math.floor(HSLMAX/6)) {
// alert("hue_to_rgb: 1");
return ( n1 + Math.round( (n2-n1)*hue/Math.floor(HSLMAX/6)));
} else if (hue < Math.floor(HSLMAX/2)) {
// alert("hue_to_rgb: 2");
return n2;
} else if (hue < Math.floor((HSLMAX*2)/3)) {
// alert("hue_to_rgb: 3");
return ( n1 + Math.round((n2-n1)*(((HSLMAX*2)/3)-hue)/Math.floor(HSLMAX/6)) );
} else {
// alert("hue_to_rgb: 4");
return n1;
}
}
function hsl_to_rgb(h, s, l)
{
var HSLMAX = 255;
var RGBMAX = 255;
var r = NaN;
var g = NaN;
var b = NaN;
var magic1 = NaN;
var magic2 = NaN;
if (s == 0) {
r = (l*RGBMAX)/HSLMAX;
g = (l*RGBMAX)/HSLMAX;
b = (l*RGBMAX)/HSLMAX;
} else {
if (l <= Math.floor(HSLMAX/2)) {
magic2 = Math.round(l*(HSLMAX + s) / HSLMAX);
} else {
magic2 = l+s - Math.round((l*s)/HSLMAX);
}
magic1 = 2*l-magic2;
r = Math.round(hue_to_rgb(magic1, magic2, h+Math.floor(HSLMAX/3))*RGBMAX/HSLMAX);
g = Math.round(hue_to_rgb(magic1, magic2, h)*RGBMAX/HSLMAX);
b = Math.round(hue_to_rgb(magic1, magic2, h-Math.floor(HSLMAX/3))*RGBMAX/HSLMAX);
}
// alert("r: "+r+", g: "+g+", b: "+b);
return new Array(r,g,b);
}
]]></script>
<copyright>
Copyright (c) 2002 David Bau
Distributed under the terms of the
GNU Public License, Version 2 (http://www.gnu.org/copyleft/gpl.txt)
</copyright>
</search>