hsl.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:2k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.gfx.color.hsl");
  9. dojo.require("dojo.lang.array");
  10. dojo.lang.extend(dojo.gfx.color.Color, {toHsl:function () {
  11. return dojo.gfx.color.rgb2hsl(this.toRgb());
  12. }});
  13. dojo.gfx.color.rgb2hsl = function (r, g, b) {
  14. if (dojo.lang.isArray(r)) {
  15. b = r[2] || 0;
  16. g = r[1] || 0;
  17. r = r[0] || 0;
  18. }
  19. r /= 255;
  20. g /= 255;
  21. b /= 255;
  22. var h = null;
  23. var s = null;
  24. var l = null;
  25. var min = Math.min(r, g, b);
  26. var max = Math.max(r, g, b);
  27. var delta = max - min;
  28. l = (min + max) / 2;
  29. s = 0;
  30. if ((l > 0) && (l < 1)) {
  31. s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
  32. }
  33. h = 0;
  34. if (delta > 0) {
  35. if ((max == r) && (max != g)) {
  36. h += (g - b) / delta;
  37. }
  38. if ((max == g) && (max != b)) {
  39. h += (2 + (b - r) / delta);
  40. }
  41. if ((max == b) && (max != r)) {
  42. h += (4 + (r - g) / delta);
  43. }
  44. h *= 60;
  45. }
  46. h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
  47. s = Math.ceil(s * 255);
  48. l = Math.ceil(l * 255);
  49. return [h, s, l];
  50. };
  51. dojo.gfx.color.hsl2rgb = function (h, s, l) {
  52. if (dojo.lang.isArray(h)) {
  53. l = h[2] || 0;
  54. s = h[1] || 0;
  55. h = h[0] || 0;
  56. }
  57. h = (h / 255) * 360;
  58. if (h == 360) {
  59. h = 0;
  60. }
  61. s = s / 255;
  62. l = l / 255;
  63. while (h < 0) {
  64. h += 360;
  65. }
  66. while (h > 360) {
  67. h -= 360;
  68. }
  69. var r, g, b;
  70. if (h < 120) {
  71. r = (120 - h) / 60;
  72. g = h / 60;
  73. b = 0;
  74. } else {
  75. if (h < 240) {
  76. r = 0;
  77. g = (240 - h) / 60;
  78. b = (h - 120) / 60;
  79. } else {
  80. r = (h - 240) / 60;
  81. g = 0;
  82. b = (360 - h) / 60;
  83. }
  84. }
  85. r = Math.min(r, 1);
  86. g = Math.min(g, 1);
  87. b = Math.min(b, 1);
  88. r = 2 * s * r + (1 - s);
  89. g = 2 * s * g + (1 - s);
  90. b = 2 * s * b + (1 - s);
  91. if (l < 0.5) {
  92. r = l * r;
  93. g = l * g;
  94. b = l * b;
  95. } else {
  96. r = (1 - l) * r + 2 * l - 1;
  97. g = (1 - l) * g + 2 * l - 1;
  98. b = (1 - l) * b + 2 * l - 1;
  99. }
  100. r = Math.ceil(r * 255);
  101. g = Math.ceil(g * 255);
  102. b = Math.ceil(b * 255);
  103. return [r, g, b];
  104. };
  105. dojo.gfx.color.hsl2hex = function (h, s, l) {
  106. var rgb = dojo.gfx.color.hsl2rgb(h, s, l);
  107. return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
  108. };
  109. dojo.gfx.color.hex2hsl = function (hex) {
  110. var rgb = dojo.gfx.color.hex2rgb(hex);
  111. return dojo.gfx.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
  112. };