<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head> <title>zColor Example</title> <script type="text/javascript"> /*------------------------------------------------------------------------------ * JavaScript zColor Library * Version 0.1 * by Nicholas C. Zakas, http://www.nczonline.net/ * Copyright (c) 2004-2005 Nicholas C. Zakas. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *------------------------------------------------------------------------------ */
/** * Represents an RGB color. * @class * @scope public * @constructor * @param iRed The red value for the color (0-255) * @param iGreen The green value for the color (0-255) * @param iBlue The blue value for the color (0-255) */ function zRGB(iRed, iGreen, iBlue) {
/** * The red value for the color. * @scope public */ this.r /*:int */ = parseInt(iRed,10); /** * The green value for the color. * @scope public */ this.g /*:int */ = parseInt(iGreen,10); /** * The blue value for the color. * @scope public */ this.b /*:int */= parseInt(iBlue,10); }
/** * Creates an RGB color from a hex string. * @scope public * @param sHex The hex string. * @return The RGB object for the hex string. */ zRGB.fromHexString = function (sHex /*: String */) /*:zRGB */ {
//eliminate the pound sign if (sHex.charAt(0) == "#") { sHex = sHex.substring(1); } //ENd: if (sHex.charAt(0) == "#") //extract and convert the red, green, and blue values var iRed = parseInt(sHex.substring(0,2),16); var iGreen = parseInt(sHex.substring(2,4),16); var iBlue = parseInt(sHex.substring(4,6),16); //return an array return new zRGB(iRed,iGreen,iBlue); };
/** * Returns a hex representation of the color. * @scope public * @return A hex representation of the color. */ zRGB.prototype.toHexString = function () /*:String */ {
//extract and convert the red, green, and blue values var sRed = this.r.toString(16).toUpperCase(); var sGreen = this.g.toString(16).toUpperCase(); var sBlue = this.b.toString(16).toUpperCase(); //make sure there are two digits in each code if (sRed.length == 1) { sRed = "0" + sRed; } //End: if (sRed.length == 1) if (sGreen.length == 1) { sGreen = "0" + sGreen; } //End: if (sGreen.length == 1) if (sBlue.length == 1) { sBlue = "0" + sBlue; } //End: if (sBlue.length == 1) //return the hex code return "#" + sRed + sGreen + sBlue; };
/** * Returns an HSL representation of the color. * @scope public * @return An HSL representation of the color. */ zRGB.prototype.toHSL = function () /*:zHSL */ { var iMax = Math.max(this.r, this.g, this.b); var iMin = Math.min(this.r, this.g, this.b); var iDelta = iMax-iMin;
var iLum = Math.round((iMax+iMin)/2); var iHue = 0; var iSat = 0; if (iDelta > 0) { iSat = Math.ceil(((iLum < (0.5*255)) ? iDelta/(iMax + iMin) : iDelta/((2*255)-iMax-iMin))*255);
var iRedC = (iMax-this.r)/iDelta; var iGreenC = (iMax-this.g)/iDelta; var iBlueC = (iMax-this.b)/iDelta; if (this.r == iMax) { iHue = iBlueC - iGreenC; } else if (this.g == iMax) { iHue = 2.0 + iRedC - iBlueC; } else { iHue = 4.0 + iGreenC - iRedC; } iHue /= 6.0; if (iHue < 0) { iHue += 1.0; }
iHue = Math.round(iHue * 255); } return new zHSL(iHue,iSat,iLum); };
/** * Returns the color in a string form. * @scope public * @return The color in a string form. */ zRGB.prototype.toString = function () /*:String */ { return "rgb(" + this.r + "," + this.g + "," + this.b + ")"; };
/** * Represents an HSL color. * @class * @scope public * @constructor * @param iHue The hue value for the color (0-255) * @param iSat The saturation value for the color (0-255) * @param iLum The luminosity value for the color (0-255) */ function zHSL(iHue, iSat, iLum) {
/** * The hue value for the color. * @scope public */ this.h /*:int */ = parseInt(iHue,10); /** * The saturation value for the color. * @scope public */ this.s /*:int */ = parseInt(iSat,10); /** * The luminosity value for the color. * @scope public */ this.l /*:int */= parseInt(iLum,10); }
/** * Converts the color into RGB form. * @scope public * @return An RGB version of the color. */ zHSL.prototype.toRGB = function () /*:zRGB */ {
iHue = this.h/255; iSat = this.s/255; iLum = this.l/255;
var iRed, iGreen, iBlue; if (iSat == 0) { iRed = iGreen = iBlue = iLum; } else {
var m1, m2; if (iLum <= 0.5) { m2 = iLum * (1+iSat); } else { m2 = iLum + iSat - (iLum * iSat); } m1 = 2.0 * iLum - m2; hf2 = iHue + 1/3; if (hf2 < 0) hf2 = hf2 + 1; if (hf2 > 1) hf2 = hf2 - 1; if (6 * hf2 < 1) { iRed = (m1+(m2-m1)*hf2*6); } else { if (2 * hf2 < 1) { iRed = m2; } else { if (3.0*hf2 < 2.0) { iRed = (m1+(m2-m1)*((2.0/3.0)-hf2)*6.0); } else { iRed = m1; } } }
//Calculate Green if (iHue < 0) {iHue = iHue + 1.0;} if (iHue > 1) {iHue = iHue - 1.0;} if (6.0 * iHue < 1){ iGreen = (m1+(m2-m1)*iHue*6.0);} else { if (2.0 * iHue < 1){ iGreen = m2; } else { if (3.0*iHue < 2.0) { iGreen = (m1+(m2-m1)*((2.0/3.0)-iHue)*6.0); } else { iGreen = m1; } } } //Calculate Blue hf2=iHue-1.0/3.0; if (hf2 < 0) {hf2 = hf2 + 1.0;} if (hf2 > 1) {hf2 = hf2 - 1.0;} if (6.0 * hf2 < 1) { iBlue = (m1+(m2-m1)*hf2*6.0); } else { if (2.0 * hf2 < 1){ iBlue = m2; } else { if (3.0*hf2 < 2.0) { iBlue = (m1+(m2-m1)*((2.0/3.0)-hf2)*6.0); } else { iBlue = m1; } } } } return new zRGB(Math.round(iRed*255),Math.round(iGreen*255),Math.round(iBlue*255)); };
/** * Returns the color in a string form. * @scope public * @return The color in a string form. */ zHSL.prototype.toString = function () /*:String */ { return "hsl(" + this.h + "," + this.s + "," + this.l + ")"; };
</script> <script type="text/javascript"> function convertToHSL() { var iRed = parseInt(document.getElementById("txtRed").value); var iBlue = parseInt(document.getElementById("txtBlue").value); var iGreen = parseInt(document.getElementById("txtGreen").value); var oRGB = new zRGB(iRed, iGreen, iBlue); var oHSL = oRGB.toHSL();
document.getElementById("txtHue").value = oHSL.h; document.getElementById("txtSat").value = oHSL.s; document.getElementById("txtLum").value = oHSL.l; } function convertToRGB() { var iHue = parseInt(document.getElementById("txtHue").value); var iSat = parseInt(document.getElementById("txtSat").value); var iLum = parseInt(document.getElementById("txtLum").value); var oHSL = new zHSL(iHue, iSat, iLum); var oRGB = oHSL.toRGB(); document.getElementById("txtRed").value = oRGB.r; document.getElementById("txtGreen").value = oRGB.g; document.getElementById("txtBlue").value = oRGB.b; } </script> </head> <body> <form> <table border="0"> <tr> <td> R: <input type="text" id="txtRed" /><br /> G: <input type="text" id="txtGreen" /><br /> B: <input type="text" id="txtBlue" /><br /> <input type="button" value="to HSL ->" onclick="convertToHSL()"/> </td> <td> H: <input type="text" id="txtHue" /><br /> S: <input type="text" id="txtSat" /><br /> L: <input type="text" id="txtLum" /><br /> <input type="button" value="<- to RGB" onclick="convertToRGB()"/> </td> </tr> </table> </form>
</body> </html>
|