color.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
- /*
- 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.gfx.color");
- dojo.require("dojo.lang.common");
- dojo.require("dojo.lang.array");
- dojo.gfx.color.Color = function (r, g, b, a) {
- if (dojo.lang.isArray(r)) {
- this.r = r[0];
- this.g = r[1];
- this.b = r[2];
- this.a = r[3] || 1;
- } else {
- if (dojo.lang.isString(r)) {
- var rgb = dojo.gfx.color.extractRGB(r);
- this.r = rgb[0];
- this.g = rgb[1];
- this.b = rgb[2];
- this.a = g || 1;
- } else {
- if (r instanceof dojo.gfx.color.Color) {
- this.r = r.r;
- this.b = r.b;
- this.g = r.g;
- this.a = r.a;
- } else {
- this.r = r;
- this.g = g;
- this.b = b;
- this.a = a;
- }
- }
- }
- };
- dojo.gfx.color.Color.fromArray = function (arr) {
- return new dojo.gfx.color.Color(arr[0], arr[1], arr[2], arr[3]);
- };
- dojo.extend(dojo.gfx.color.Color, {toRgb:function (includeAlpha) {
- if (includeAlpha) {
- return this.toRgba();
- } else {
- return [this.r, this.g, this.b];
- }
- }, toRgba:function () {
- return [this.r, this.g, this.b, this.a];
- }, toHex:function () {
- return dojo.gfx.color.rgb2hex(this.toRgb());
- }, toCss:function () {
- return "rgb(" + this.toRgb().join() + ")";
- }, toString:function () {
- return this.toHex();
- }, blend:function (color, weight) {
- var rgb = null;
- if (dojo.lang.isArray(color)) {
- rgb = color;
- } else {
- if (color instanceof dojo.gfx.color.Color) {
- rgb = color.toRgb();
- } else {
- rgb = new dojo.gfx.color.Color(color).toRgb();
- }
- }
- return dojo.gfx.color.blend(this.toRgb(), rgb, weight);
- }});
- dojo.gfx.color.named = {white:[255, 255, 255], black:[0, 0, 0], red:[255, 0, 0], green:[0, 255, 0], lime:[0, 255, 0], blue:[0, 0, 255], navy:[0, 0, 128], gray:[128, 128, 128], silver:[192, 192, 192]};
- dojo.gfx.color.blend = function (a, b, weight) {
- if (typeof a == "string") {
- return dojo.gfx.color.blendHex(a, b, weight);
- }
- if (!weight) {
- weight = 0;
- }
- weight = Math.min(Math.max(-1, weight), 1);
- weight = ((weight + 1) / 2);
- var c = [];
- for (var x = 0; x < 3; x++) {
- c[x] = parseInt(b[x] + ((a[x] - b[x]) * weight));
- }
- return c;
- };
- dojo.gfx.color.blendHex = function (a, b, weight) {
- return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a), dojo.gfx.color.hex2rgb(b), weight));
- };
- dojo.gfx.color.extractRGB = function (color) {
- var hex = "0123456789abcdef";
- color = color.toLowerCase();
- if (color.indexOf("rgb") == 0) {
- var matches = color.match(/rgba*((d+), *(d+), *(d+)/i);
- var ret = matches.splice(1, 3);
- return ret;
- } else {
- var colors = dojo.gfx.color.hex2rgb(color);
- if (colors) {
- return colors;
- } else {
- return dojo.gfx.color.named[color] || [255, 255, 255];
- }
- }
- };
- dojo.gfx.color.hex2rgb = function (hex) {
- var hexNum = "0123456789ABCDEF";
- var rgb = new Array(3);
- if (hex.indexOf("#") == 0) {
- hex = hex.substring(1);
- }
- hex = hex.toUpperCase();
- if (hex.replace(new RegExp("[" + hexNum + "]", "g"), "") != "") {
- return null;
- }
- if (hex.length == 3) {
- rgb[0] = hex.charAt(0) + hex.charAt(0);
- rgb[1] = hex.charAt(1) + hex.charAt(1);
- rgb[2] = hex.charAt(2) + hex.charAt(2);
- } else {
- rgb[0] = hex.substring(0, 2);
- rgb[1] = hex.substring(2, 4);
- rgb[2] = hex.substring(4);
- }
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
- }
- return rgb;
- };
- dojo.gfx.color.rgb2hex = function (r, g, b) {
- if (dojo.lang.isArray(r)) {
- g = r[1] || 0;
- b = r[2] || 0;
- r = r[0] || 0;
- }
- var ret = dojo.lang.map([r, g, b], function (x) {
- x = new Number(x);
- var s = x.toString(16);
- while (s.length < 2) {
- s = "0" + s;
- }
- return s;
- });
- ret.unshift("#");
- return ret.join("");
- };