?? hsv.js
字號:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.graphics.color.hsv");dojo.require("dojo.lang.array");dojo.lang.extend(dojo.graphics.color.Color, { toHsv: function() { return dojo.graphics.color.rgb2hsv(this.toRgb()); }});dojo.graphics.color.rgb2hsv = function(r, g, b){ if (dojo.lang.isArray(r)) { b = r[2] || 0; g = r[1] || 0; r = r[0] || 0; } // r,g,b, each 0 to 255, to HSV. // h = 0.0 to 360.0 (corresponding to 0..360.0 degrees around hexcone) // s = 0.0 (shade of gray) to 1.0 (pure color) // v = 0.0 (black) to 1.0 {white) // // Based on C Code in "Computer Graphics -- Principles and Practice," // Foley et al, 1996, p. 592. // // our calculatuions are based on 'regular' values (0-360, 0-1, 0-1) // but we return bytes values (0-255, 0-255, 0-255) var h = null; var s = null; var v = null; var min = Math.min(r, g, b); v = Math.max(r, g, b); var delta = v - min; // calculate saturation (0 if r, g and b are all 0) s = (v == 0) ? 0 : delta/v; if (s == 0){ // achromatic: when saturation is, hue is undefined h = 0; }else{ // chromatic if (r == v){ // between yellow and magenta h = 60 * (g - b) / delta; }else{ if (g == v){ // between cyan and yellow h = 120 + 60 * (b - r) / delta; }else{ if (b == v){ // between magenta and cyan h = 240 + 60 * (r - g) / delta; } } } if (h < 0){ h += 360; } } h = (h == 0) ? 360 : Math.ceil((h / 360) * 255); s = Math.ceil(s * 255); return [h, s, v];}dojo.graphics.color.hsv2rgb = function(h, s, v){ if (dojo.lang.isArray(h)) { v = h[2] || 0; s = h[1] || 0; h = h[0] || 0; } h = (h / 255) * 360; if (h == 360){ h = 0;} s = s / 255; v = v / 255; // Based on C Code in "Computer Graphics -- Principles and Practice," // Foley et al, 1996, p. 593. // // H = 0.0 to 360.0 (corresponding to 0..360 degrees around hexcone) 0 for S = 0 // S = 0.0 (shade of gray) to 1.0 (pure color) // V = 0.0 (black) to 1.0 (white) var r = null; var g = null; var b = null; if (s == 0){ // color is on black-and-white center line // achromatic: shades of gray r = v; g = v; b = v; }else{ // chromatic color var hTemp = h / 60; // h is now IN [0,6] var i = Math.floor(hTemp); // largest integer <= h var f = hTemp - i; // fractional part of h var p = v * (1 - s); var q = v * (1 - (s * f)); var t = v * (1 - (s * (1 - f))); switch(i){ case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; } } r = Math.ceil(r * 255); g = Math.ceil(g * 255); b = Math.ceil(b * 255); return [r, g, b];}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -