Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F945478
Colorspace.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
24 KB
Subscribers
None
Colorspace.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.color.Colorspace"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.color.Colorspace"
]
=
true
;
dojo
.
provide
(
"dojox.color.Colorspace"
);
dojo
.
require
(
"dojox.math.matrix"
);
dojox
.
color
.
Colorspace
=
new
(
function
(){
var
dxc
=
dojox
.
color
;
var
dxm
=
dojox
.
math
.
matrix
;
var
self
=
this
;
var
wpMap
=
{
"2"
:
{
"E"
:
{
x
:
1
/
3
,
y
:
1
/
3
,
t
:
5400
},
"D50"
:
{
x
:
0.34567
,
y
:
0.3585
,
t
:
5000
},
"D55"
:
{
x
:
0.33242
,
y
:
0.34743
,
t
:
5500
},
"D65"
:
{
x
:
0.31271
,
y
:
0.32902
,
t
:
6500
},
"D75"
:
{
x
:
0.29902
,
y
:
0.31485
,
t
:
7500
},
"A"
:
{
x
:
0.44757
,
y
:
0.40745
,
t
:
2856
},
"B"
:
{
x
:
0.34842
,
y
:
0.35161
,
t
:
4874
},
"C"
:
{
x
:
0.31006
,
y
:
0.31616
,
t
:
6774
},
"9300"
:
{
x
:
0.2848
,
y
:
0.2932
,
t
:
9300
},
"F2"
:
{
x
:
0.37207
,
y
:
0.37512
,
t
:
4200
},
"F7"
:
{
x
:
0.31285
,
y
:
0.32918
,
t
:
6500
},
"F11"
:
{
x
:
0.38054
,
y
:
0.37691
,
t
:
4000
}
},
"10"
:
{
"E"
:
{
x
:
1
/
3
,
y
:
1
/
3
,
t
:
5400
},
"D50"
:
{
x
:
0.34773
,
y
:
0.35952
,
t
:
5000
},
"D55"
:
{
x
:
0.33411
,
y
:
0.34877
,
t
:
5500
},
"D65"
:
{
x
:
0.31382
,
y
:
0.331
,
t
:
6500
},
"D75"
:
{
x
:
0.29968
,
y
:
0.3174
,
t
:
7500
},
"A"
:
{
x
:
0.45117
,
y
:
0.40594
,
t
:
2856
},
"B"
:
{
x
:
0.3498
,
y
:
0.3527
,
t
:
4874
},
"C"
:
{
x
:
0.31039
,
y
:
0.31905
,
t
:
6774
},
"F2"
:
{
x
:
0.37928
,
y
:
0.36723
,
t
:
4200
},
"F7"
:
{
x
:
0.31565
,
y
:
0.32951
,
t
:
6500
},
"F11"
:
{
x
:
0.38543
,
y
:
0.3711
,
t
:
4000
}
}
};
var
profiles
=
{
"Adobe RGB 98"
:
[
2.2
,
"D65"
,
0.64
,
0.33
,
0.297361
,
0.21
,
0.71
,
0.627355
,
0.15
,
0.06
,
0.075285
],
"Apple RGB"
:
[
1.8
,
"D65"
,
0.625
,
0.34
,
0.244634
,
0.28
,
0.595
,
0.672034
,
0.155
,
0.07
,
0.083332
],
"Best RGB"
:
[
2.2
,
"D50"
,
0.7347
,
0.2653
,
0.228457
,
0.215
,
0.775
,
0.737352
,
0.13
,
0.035
,
0.034191
],
"Beta RGB"
:
[
2.2
,
"D50"
,
0.6888
,
0.3112
,
0.303273
,
0.1986
,
0.7551
,
0.663786
,
0.1265
,
0.0352
,
0.032941
],
"Bruce RGB"
:
[
2.2
,
"D65"
,
0.64
,
0.33
,
0.240995
,
0.28
,
0.65
,
0.683554
,
0.15
,
0.06
,
0.075452
],
"CIE RGB"
:
[
2.2
,
"E"
,
0.735
,
0.265
,
0.176204
,
0.274
,
0.717
,
0.812985
,
0.167
,
0.009
,
0.010811
],
"ColorMatch RGB"
:
[
1.8
,
"D50"
,
0.63
,
0.34
,
0.274884
,
0.295
,
0.605
,
0.658132
,
0.15
,
0.075
,
0.066985
],
"DON RGB 4"
:
[
2.2
,
"D50"
,
0.696
,
0.3
,
0.27835
,
0.215
,
0.765
,
0.68797
,
0.13
,
0.035
,
0.03368
],
"ECI RGB"
:
[
1.8
,
"D50"
,
0.67
,
0.33
,
0.32025
,
0.21
,
0.71
,
0.602071
,
0.14
,
0.08
,
0.077679
],
"EktaSpace PS5"
:
[
2.2
,
"D50"
,
0.695
,
0.305
,
0.260629
,
0.26
,
0.7
,
0.734946
,
0.11
,
0.005
,
0.004425
],
"NTSC RGB"
:
[
2.2
,
"C"
,
0.67
,
0.33
,
0.298839
,
0.21
,
0.71
,
0.586811
,
0.14
,
0.08
,
0.11435
],
"PAL/SECAM RGB"
:
[
2.2
,
"D65"
,
0.64
,
0.33
,
0.222021
,
0.29
,
0.6
,
0.706645
,
0.15
,
0.06
,
0.071334
],
"Pro Photo RGB"
:
[
1.8
,
"D50"
,
0.7347
,
0.2653
,
0.28804
,
0.1596
,
0.8404
,
0.711874
,
0.0366
,
0.0001
,
0.000086
],
"SMPTE/C RGB"
:
[
2.2
,
"D65"
,
0.63
,
0.34
,
0.212395
,
0.31
,
0.595
,
0.701049
,
0.155
,
0.07
,
0.086556
],
"sRGB"
:
[
2.2
,
"D65"
,
0.64
,
0.33
,
0.212656
,
0.3
,
0.6
,
0.715158
,
0.15
,
0.06
,
0.072186
],
"Wide Gamut RGB"
:
[
2.2
,
"D50"
,
0.735
,
0.265
,
0.258187
,
0.115
,
0.826
,
0.724938
,
0.157
,
0.018
,
0.016875
]
};
var
adaptors
=
{
"XYZ scaling"
:
{
ma
:
[[
1
,
0
,
0
],
[
0
,
1
,
0
],
[
0
,
0
,
1
]],
mai
:
[[
1
,
0
,
0
],
[
0
,
1
,
0
],
[
0
,
0
,
1
]]
},
"Bradford"
:
{
ma
:
[[
0.8951
,
-
0.7502
,
0.0389
],
[
0.2664
,
1.7135
,
-
0.0685
],
[
-
0.1614
,
0.0367
,
1.0296
]],
mai
:
[[
0.986993
,
0.432305
,
-
0.008529
],
[
-
0.147054
,
0.51836
,
0.040043
],
[
0.159963
,
0.049291
,
0.968487
]]
},
"Von Kries"
:
{
ma
:
[[
0.40024
,
-
0.2263
,
0
],
[
0.7076
,
1.16532
,
0
],
[
-
0.08081
,
0.0457
,
0.91822
]],
mai
:
[[
1.859936
,
0.361191
,
0
],
[
-
1.129382
,
0.638812
,
0
],
[
0.219897
,
-
0.000006
,
1.089064
]]
}
};
var
cMaps
=
{
"XYZ"
:
{
"xyY"
:
function
(
xyz
,
kwArgs
){
kwArgs
=
dojo
.
mixin
({
whitepoint
:
"D65"
,
observer
:
"10"
,
useApproximation
:
true
},
kwArgs
||
{});
var
wp
=
self
.
whitepoint
(
kwArgs
.
whitepoint
,
kwArgs
.
observer
);
var
sum
=
xyz
.
X
+
xyz
.
Y
+
xyz
.
Z
;
if
(
sum
==
0
){
var
x
=
wp
.
x
,
y
=
wp
.
y
;
}
else
{
var
x
=
xyz
.
X
/
sum
,
y
=
xyz
.
Y
/
sum
;
}
return
{
x
:
x
,
y
:
y
,
Y
:
xyz
.
Y
};
},
"Lab"
:
function
(
xyz
,
kwArgs
){
kwArgs
=
dojo
.
mixin
({
whitepoint
:
"D65"
,
observer
:
"10"
,
useApproximation
:
true
},
kwArgs
||
{});
var
kappa
=
self
.
kappa
(
kwArgs
.
useApproximation
),
epsilon
=
self
.
epsilon
(
kwArgs
.
useApproximation
);
var
wp
=
self
.
whitepoint
(
kwArgs
.
whitepoint
,
kwArgs
.
observer
);
var
xr
=
xyz
.
X
/
wp
.
x
,
yr
=
xyz
.
Y
/
wp
.
y
,
zr
=
xyz
.
z
/
wp
.
z
;
var
fx
=
(
xr
>
epsilon
)
?
Math
.
pow
(
xr
,
1
/
3
)
:
(
kappa
*
xr
+
16
)
/
116
;
var
fy
=
(
yr
>
epsilon
)
?
Math
.
pow
(
yr
,
1
/
3
)
:
(
kappa
*
yr
+
16
)
/
116
;
var
fz
=
(
zr
>
epsilon
)
?
Math
.
pow
(
zr
,
1
/
3
)
:
(
kappa
*
zr
+
16
)
/
116
;
var
L
=
116
*
fy
-
16
,
a
=
500
*
(
fx
-
fy
),
b
=
200
*
(
fy
-
fz
);
return
{
L
:
L
,
a
:
a
,
b
:
b
};
},
"Luv"
:
function
(
xyz
,
kwArgs
){
kwArgs
=
dojo
.
mixin
({
whitepoint
:
"D65"
,
observer
:
"10"
,
useApproximation
:
true
},
kwArgs
||
{});
var
kappa
=
self
.
kappa
(
kwArgs
.
useApproximation
),
epsilon
=
self
.
epsilon
(
kwArgs
.
useApproximation
);
var
wp
=
self
.
whitepoint
(
kwArgs
.
whitepoint
,
kwArgs
.
observer
);
var
ud
=
(
4
*
xyz
.
X
)
/
(
xyz
.
X
+
15
*
xyz
.
Y
+
3
*
xyz
.
Z
);
var
vd
=
(
9
*
xyz
.
Y
)
/
(
xyz
.
X
+
15
*
xyz
.
Y
+
3
*
xyz
.
Z
);
var
udr
=
(
4
*
wp
.
x
)
/
(
wp
.
x
+
15
*
wp
.
y
+
3
*
wp
.
z
);
var
vdr
=
(
9
*
wp
.
y
)
/
(
wp
.
x
+
15
*
wp
.
y
+
3
*
wp
.
z
);
var
yr
=
xyz
.
Y
/
wp
.
y
;
var
L
=
(
yr
>
epsilon
)
?
116
*
Math
.
pow
(
yr
,
1
/
3
)
-
16
:
kappa
*
yr
;
var
u
=
13
*
L
*
(
ud
-
udr
);
var
v
=
13
*
L
*
(
vd
-
vdr
);
return
{
L
:
L
,
u
:
u
,
v
:
v
};
}
},
"xyY"
:
{
"XYZ"
:
function
(
xyY
){
if
(
xyY
.
y
==
0
){
var
X
=
0
,
Y
=
0
,
Z
=
0
;
}
else
{
var
X
=
(
xyY
.
x
*
xyY
.
Y
)
/
xyY
.
y
;
var
Y
=
xyY
.
Y
;
var
Z
=
((
1
-
xyY
.
x
-
xyY
.
y
)
*
xyY
.
Y
)
/
xyY
.
y
;
}
return
{
X
:
X
,
Y
:
Y
,
Z
:
Z
};
}
},
"Lab"
:
{
"XYZ"
:
function
(
lab
,
kwArgs
){
kwArgs
=
dojo
.
mixin
({
whitepoint
:
"D65"
,
observer
:
"10"
,
useApproximation
:
true
},
kwArgs
||
{});
var
b
=
kwArgs
.
useApproximation
,
kappa
=
self
.
kappa
(
b
),
epsilon
=
self
.
epsilon
(
b
);
var
wp
=
self
.
whitepoint
(
kwArgs
.
whitepoint
,
kwArgs
.
observer
);
var
yr
=
(
lab
.
L
>
(
kappa
*
epsilon
))
?
Math
.
pow
((
lab
.
L
+
16
)
/
116
,
3
)
:
lab
.
L
/
kappa
;
var
fy
=
(
yr
>
epsilon
)
?
(
lab
.
L
+
16
)
/
116
:
(
kappa
*
yr
+
16
)
/
116
;
var
fx
=
(
lab
.
a
/
500
)
+
fy
;
var
fz
=
fy
-
(
lab
.
b
/
200
);
var
fxcube
=
Math
.
pow
(
fx
,
3
),
fzcube
=
Math
.
pow
(
fz
,
3
);
var
xr
=
(
fxcube
>
epsilon
)
?
fxcube
:
(
116
*
fx
-
16
)
/
kappa
;
var
zr
=
(
fzcube
>
epsilon
)
?
fzcube
:
(
116
*
fz
-
16
)
/
kappa
;
return
{
X
:
xr
*
wp
.
x
,
Y
:
yr
*
wp
.
y
,
Z
:
zr
*
wp
.
z
};
},
"LCHab"
:
function
(
lab
){
var
L
=
lab
.
L
,
C
=
Math
.
pow
(
lab
.
a
*
lab
.
a
+
lab
.
b
*
lab
.
b
,
0.5
),
H
=
Math
.
atan
(
lab
.
b
,
lab
.
a
)
*
(
180
/
Math
.
PI
);
if
(
H
<
0
){
H
+=
360
;
}
if
(
H
<
360
){
H
-=
360
;
}
return
{
L
:
L
,
C
:
C
,
H
:
H
};
}
},
"LCHab"
:
{
"Lab"
:
function
(
lch
){
var
hRad
=
lch
.
H
*
(
Math
.
PI
/
180
),
L
=
lch
.
L
,
a
=
lch
.
C
/
Math
.
pow
(
Math
.
pow
(
Math
.
tan
(
hRad
),
2
)
+
1
,
0.5
);
if
(
90
<
lchH
&&
lch
.
H
<
270
){
a
=
-
a
;
}
var
b
=
Math
.
pow
(
Math
.
pow
(
lch
.
C
,
2
)
-
Math
.
pow
(
a
,
2
),
0.5
);
if
(
lch
.
H
>
180
){
b
=
-
b
;
}
return
{
L
:
L
,
a
:
a
,
b
:
b
};
}
},
"Luv"
:
{
"XYZ"
:
function
(
Luv
,
kwArgs
){
kwArgs
=
dojo
.
mixin
({
whitepoint
:
"D65"
,
observer
:
"10"
,
useApproximation
:
true
},
kwArgs
||
{});
var
b
=
kwArgs
.
useApproximation
,
kappa
=
self
.
kappa
(
b
),
epsilon
=
self
.
epsilon
(
b
);
var
wp
=
self
.
whitepoint
(
kwArgs
.
whitepoint
,
kwArgs
.
observer
);
var
uz
=
(
4
*
wp
.
x
)
/
(
wp
.
x
+
15
*
wp
.
y
+
3
*
wp
.
z
);
var
vz
=
(
9
*
wp
.
y
)
/
(
wp
.
x
+
15
*
wp
.
y
+
3
*
wp
.
z
);
var
Y
=
(
Luv
.
L
>
kappa
*
epsilon
)
?
Math
.
pow
((
Luv
.
L
+
16
)
/
116
,
3
)
:
Luv
.
L
/
kappa
;
var
a
=
(
1
/
3
)
*
(((
52
*
Luv
.
L
)
/
(
Luv
.
u
+
13
*
Luv
.
L
*
uz
))
-
1
);
var
b
=-
5
*
Y
,
c
=-
(
1
/
3
),
d
=
Y
*
(((
39
*
Luv
.
L
)
/
(
Luv
.
v
+
13
*
Luv
.
L
*
vz
))
-
5
);
var
X
=
(
d
-
b
)
/
(
a
-
c
),
Z
=
X
*
a
+
b
;
return
{
X
:
X
,
Y
:
Y
,
Z
:
Z
};
},
"LCHuv"
:
function
(
Luv
){
var
L
=
Luv
.
L
,
C
=
Math
.
pow
(
Luv
.
u
*
Luv
.
u
+
Luv
.
v
*
Luv
*
v
,
0.5
),
H
=
Math
.
atan
(
Luv
.
v
,
Luv
.
u
)
*
(
180
/
Math
.
PI
);
if
(
H
<
0
){
H
+=
360
;
}
if
(
H
>
360
){
H
-=
360
;
}
return
{
L
:
L
,
C
:
C
,
H
:
H
};
}
},
"LCHuv"
:
{
"Luv"
:
function
(
LCH
){
var
hRad
=
LCH
.
H
*
(
Math
.
PI
/
180
);
var
L
=
LCH
.
L
,
u
=
LCH
.
C
/
Math
.
pow
(
Math
.
pow
(
Math
.
tan
(
hRad
),
2
)
+
1
,
0.5
);
var
v
=
Math
.
pow
(
LCH
.
C
*
LCH
.
C
-
u
*
u
,
0.5
);
if
(
90
<
LCH
.
H
&&
LCH
.
H
>
270
){
u
*=-
1
;
}
if
(
LCH
.
H
>
180
){
v
*=-
1
;
}
return
{
L
:
L
,
u
:
u
,
v
:
v
};
}
}
};
var
converters
=
{
"CMY"
:
{
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmy
(
obj
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmy
(
obj
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmy
(
obj
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
dxc
.
fromCmy
(
obj
).
toXYZ
(
kwArgs
));
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
converters
[
"CMY"
][
"Lab"
](
obj
));
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromCmy
(
obj
).
toXYZ
(
kwArgs
)));
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromCmy
(
obj
).
toXYZ
(
kwArgs
));
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmy
(
obj
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmy
(
obj
).
toXYZ
(
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
dxc
.
fromCmy
(
obj
).
toXYZ
(
kwArgs
));
}
},
"CMYK"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmyk
(
obj
).
toCmy
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmyk
(
obj
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmyk
(
obj
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
dxc
.
fromCmyk
(
obj
).
toXYZ
(
kwArgs
));
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
converters
[
"CMYK"
][
"Lab"
](
obj
));
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromCmyk
(
obj
).
toXYZ
(
kwArgs
)));
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromCmyk
(
obj
).
toXYZ
(
kwArgs
));
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmyk
(
obj
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromCmyk
(
obj
).
toXYZ
(
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
dxc
.
fromCmyk
(
obj
).
toXYZ
(
kwArgs
));
}
},
"HSL"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsl
(
obj
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsl
(
obj
).
toCmyk
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsl
(
obj
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
dxc
.
fromHsl
(
obj
).
toXYZ
(
kwArgs
));
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
converters
[
"CMYK"
][
"Lab"
](
obj
));
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromHsl
(
obj
).
toXYZ
(
kwArgs
)));
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromHsl
(
obj
).
toXYZ
(
kwArgs
));
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsl
(
obj
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsl
(
obj
).
toXYZ
(
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
dxc
.
fromHsl
(
obj
).
toXYZ
(
kwArgs
));
}
},
"HSV"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsv
(
obj
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsv
(
obj
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsv
(
obj
).
toHsl
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
dxc
.
fromHsv
(
obj
).
toXYZ
(
kwArgs
));
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
converters
[
"CMYK"
][
"Lab"
](
obj
));
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromHsv
(
obj
).
toXYZ
(
kwArgs
)));
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
dxc
.
fromHsv
(
obj
).
toXYZ
(
kwArgs
));
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsv
(
obj
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromHsv
(
obj
).
toXYZ
(
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
dxc
.
fromHsv
(
obj
).
toXYZ
(
kwArgs
));
}
},
"Lab"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
)).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
)).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
)).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
)).
toHsv
();
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
obj
,
kwArgs
);
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"LCHuv"
](
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Luv"
](
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
));
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
cMaps
[
"Lab"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
}
},
"LCHab"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
obj
,
kwArgs
);
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"LCHuv"
](
cMaps
[
"XYZ"
][
"Luv"
](
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
),
kwArgs
);},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Luv"
](
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
);},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
,
kwArgs
),
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"LCHab"
][
"Lab"
](
obj
),
kwArgs
),
kwArgs
);
}
},
"LCHuv"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
);
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
cMaps
[
"XYZ"
][
"Lab"
](
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
),
kwArgs
);
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
obj
,
kwArgs
);
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"LCHuv"
][
"Luv"
](
obj
),
kwArgs
),
kwArgs
);
},
},
"Luv"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
cMaps
[
"XYZ"
][
"Lab"
](
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
),
kwArgs
);
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"LCHuv"
](
obj
,
kwArgs
);
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
cMaps
[
"Luv"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
},
"RGB"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
obj
.
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
obj
.
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
obj
.
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
obj
.
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
obj
.
toXYZ
(
kwArgs
),
kwArgs
);
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHab"
][
"Lab"
](
cMaps
[
"XYZ"
][
"Lab"
](
obj
.
toXYZ
(
kwArgs
),
kwArgs
),
kwArgs
);},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"XYZ"
][
"Luv"
](
obj
.
toXYZ
(
kwArgs
),
kwArgs
),
kwArgs
);},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Luv"
](
obj
.
toXYZ
(
kwArgs
),
kwArgs
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
obj
.
toXYZ
(
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
obj
.
toXYZ
(
kwArgs
),
kwArgs
);
}
},
"XYZ"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
obj
,
kwArgs
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
obj
,
kwArgs
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
obj
,
kwArgs
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
obj
,
kwArgs
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Lab"
](
obj
,
kwArgs
);
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"LCHab"
](
cMaps
[
"XYZ"
][
"Lab"
](
obj
,
kwArgs
),
kwArgs
);
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"LCHuv"
](
cMaps
[
"XYZ"
][
"Luv"
](
obj
,
kwArgs
),
kwArgs
);
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"Luv"
](
obj
,
kwArgs
);
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
obj
,
kwArgs
);
},
"xyY"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"XYZ"
][
"xyY"
](
dxc
.
fromXYZ
(
obj
,
kwArgs
),
kwArgs
);
}
},
// TODO: revisit this. xyY represents a single color, not a spectrum of colors.
"xyY"
:
{
"CMY"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toCmy
();
},
"CMYK"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toCmyk
();
},
"HSL"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toHsl
();
},
"HSV"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
).
toHsv
();
},
"Lab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"LCHab"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHab"
][
"Lab"
](
cMaps
[
"Lab"
][
"XYZ"
](
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
),
kwArgs
);
},
"LCHuv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"LCHuv"
][
"Luv"
](
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
),
kwArgs
);
},
"Luv"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"Luv"
][
"XYZ"
](
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"RGB"
:
function
(
obj
,
kwArgs
){
return
dxc
.
fromXYZ
(
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
),
kwArgs
);
},
"XYZ"
:
function
(
obj
,
kwArgs
){
return
cMaps
[
"xyY"
][
"XYZ"
](
obj
,
kwArgs
);
}
}
};
this
.
whitepoint
=
function
(
/* String */
wpName
,
/* String? */
observer
){
observer
=
observer
||
"10"
;
var
x
=
0
,
y
=
0
,
t
=
0
;
if
(
wpMap
[
observer
]
&&
wpMap
[
observer
][
wpName
]){
x
=
wpMap
[
observer
][
wpName
].
x
;
y
=
wpMap
[
observer
][
wpName
].
y
;
t
=
wpMap
[
observer
][
wpName
].
t
;
}
else
{
console
.
warn
(
"dojox.color.Colorspace::whitepoint: either the observer or the whitepoint name was not found. "
,
observer
,
wpName
);
}
var
wp
=
{
x
:
x
,
y
:
y
,
z
:
(
1
-
x
-
y
),
t
:
t
,
Y
:
1
};
return
this
.
convert
(
wp
,
"xyY"
,
"XYZ"
);
};
this
.
tempToWhitepoint
=
function
(
/* Number */
t
){
if
(
t
<
4000
){
console
.
warn
(
"dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures less than 4000K. (Passed "
,
t
,
")."
);
return
{
x
:
0
,
y
:
0
};
}
if
(
t
>
25000
){
console
.
warn
(
"dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures greater than 25000K. (Passed "
,
t
,
")."
);
return
{
x
:
0
,
y
:
0
};
}
var
t1
=
t
,
t2
=
t
*
t
,
t3
=
t2
*
t
;
var
ten9
=
Math
.
pow
(
10
,
9
),
ten6
=
Math
.
pow
(
10
,
6
),
ten3
=
Math
.
pow
(
10
,
3
);
if
(
t
<=
7000
){
var
x
=
(
-
4.607
*
ten9
/
t3
)
+
(
2.9678
*
ten6
/
t2
)
+
(
0.09911
*
ten3
/
t
)
+
0.2444063
;
}
else
{
var
x
=
(
-
2.0064
*
ten9
/
t3
)
+
(
1.9018
*
ten6
/
t2
)
+
(
0.24748
*
ten3
/
t
)
+
0.23704
;
}
var
y
=-
3
*
x
*
x
+
2.87
*
x
-
0.275
;
return
{
x
:
x
,
y
:
y
};
};
this
.
primaries
=
function
(
/* Object */
kwArgs
){
// mix in the defaults.
kwArgs
=
dojo
.
mixin
({
profile
:
"sRGB"
,
whitepoint
:
"D65"
,
observer
:
"10"
,
adaptor
:
"Bradford"
},
kwArgs
||
{});
var
m
=
[];
if
(
profiles
[
kwArgs
.
profile
]){
m
=
profiles
[
kwArgs
.
profile
].
slice
(
0
);
}
else
{
console
.
warn
(
"dojox.color.Colorspace::primaries: the passed profile was not found. "
,
"Available profiles include: "
,
profiles
,
". The profile passed was "
,
kwArgs
.
profile
);
}
var
primary
=
{
name
:
kwArgs
.
profile
,
gamma
:
m
[
0
],
whitepoint
:
m
[
1
],
xr
:
m
[
2
],
yr
:
m
[
3
],
Yr
:
m
[
4
],
xg
:
m
[
5
],
yg
:
m
[
6
],
Yg
:
m
[
7
],
xb
:
m
[
8
],
yb
:
m
[
9
],
Yb
:
m
[
10
]
};
// convert for the whitepoint
if
(
kwArgs
.
whitepoint
!=
primary
.
whitepoint
){
var
r
=
this
.
convert
(
this
.
adapt
({
color
:
this
.
convert
({
x
:
xr
,
y
:
yr
,
Y
:
Yr
},
"xyY"
,
"XYZ"
),
adaptor
:
kwArgs
.
adaptor
,
source
:
primary
.
whitepoint
,
destination
:
kwArgs
.
whitepoint
}),
"XYZ"
,
"xyY"
);
var
g
=
this
.
convert
(
this
.
adapt
({
color
:
this
.
convert
({
x
:
xg
,
y
:
yg
,
Y
:
Yg
},
"xyY"
,
"XYZ"
),
adaptor
:
kwArgs
.
adaptor
,
source
:
primary
.
whitepoint
,
destination
:
kwArgs
.
whitepoint
}),
"XYZ"
,
"xyY"
);
var
b
=
this
.
convert
(
this
.
adapt
({
color
:
this
.
convert
({
x
:
xb
,
y
:
yb
,
Y
:
Yb
},
"xyY"
,
"XYZ"
),
adaptor
:
kwArgs
.
adaptor
,
source
:
primary
.
whitepoint
,
destination
:
kwArgs
.
whitepoint
}),
"XYZ"
,
"xyY"
);
primary
=
dojo
.
mixin
(
primary
,
{
xr
:
r
.
x
,
yr
:
r
.
y
,
Yr
:
r
.
Y
,
xg
:
g
.
x
,
yg
:
g
.
y
,
Yg
:
g
.
Y
,
xb
:
b
.
x
,
yb
:
b
.
y
,
Yb
:
b
.
Y
,
whitepoint
:
kwArgs
.
whitepoint
});
}
return
dojo
.
mixin
(
primary
,
{
zr
:
1
-
primary
.
xr
-
primary
.
yr
,
zg
:
1
-
primary
.
xg
-
primary
.
yg
,
zb
:
1
-
primary
.
xb
-
primary
.
yb
});
// Object
};
this
.
adapt
=
function
(
/* Object */
kwArgs
){
// color is required in the form of XYZ, source whitepoint name is required.
if
(
!
kwArgs
.
color
||
!
kwArgs
.
source
){
console
.
error
(
"dojox.color.Colorspace::adapt: color and source arguments are required. "
,
kwArgs
);
}
// defaults
kwArgs
=
dojo
.
mixin
({
adaptor
:
"Bradford"
,
destination
:
"D65"
},
kwArgs
);
// adapt
var
swp
=
this
.
whitepoint
(
kwArgs
.
source
);
var
dwp
=
this
.
whitepoint
(
kwArgs
.
destination
);
if
(
adaptors
[
kwArgs
.
adaptor
]){
var
ma
=
adaptors
[
kwArgs
.
adaptor
].
ma
;
var
mai
=
adaptors
[
kwArgs
.
adaptor
].
mai
;
}
else
{
console
.
warn
(
"dojox.color.Colorspace::adapt: the passed adaptor '"
,
kwArgs
.
adaptor
,
"' was not found."
);
}
var
dSrc
=
dxm
.
multiply
([[
swp
.
x
,
swp
.
y
,
swp
.
z
]],
ma
);
var
dDest
=
dxm
.
multiply
([[
dwp
.
x
,
dwp
.
y
,
dwp
.
z
]],
ma
);
var
center
=
[
[
dDest
[
0
][
0
]
/
dSrc
[
0
][
0
],
0
,
0
],
[
0
,
dDest
[
0
][
1
]
/
dSrc
[
0
][
1
],
0
],
[
0
,
0
,
dDest
[
0
][
2
]
/
dSrc
[
0
][
2
]]
];
var
m
=
dxm
.
multiply
(
dxm
.
multiply
(
ma
,
center
),
mai
);
var
r
=
dxm
.
multiply
([[
kwArgs
.
color
.
X
,
kwArgs
.
color
.
Y
,
kwArgs
.
color
.
Z
]],
m
)[
0
];
return
{
X
:
r
[
0
],
Y
:
r
[
1
],
Z
:
r
[
2
]
};
};
this
.
matrix
=
function
(
/* String */
to
,
/* Object */
primary
){
var
wp
=
this
.
whitepoint
(
primary
.
whitepoint
);
var
Xr
=
p
.
xr
/
p
.
yr
,
Yr
=
1
,
Zr
=
(
1
-
p
.
xr
-
p
.
yr
)
/
p
.
yr
;
var
Xg
=
p
.
xg
/
p
.
yg
,
Yg
=
1
,
Zg
=
(
1
-
p
.
xg
-
p
.
yg
)
/
p
.
yg
;
var
Xb
=
p
.
xb
/
p
.
yb
,
Yb
=
1
,
Zr
=
(
1
-
p
.
xb
-
p
.
yb
)
/
p
.
yb
;
var
m1
=
[[
Xr
,
Yr
,
Zr
],
[
Xg
,
Yg
,
Zg
],
[
Xb
,
Yb
,
Zb
]];
var
m2
=
[[
wp
.
X
,
wp
.
Y
,
wp
.
Z
]];
var
sm
=
dojox
.
math
.
matrix
.
multiply
(
m2
,
dojox
.
math
.
matrix
.
inverse
(
m1
));
var
Sr
=
sm
[
0
][
0
],
Sg
=
sm
[
0
][
1
],
Sb
=
sm
[
0
][
2
];
var
result
=
[
[
Sr
*
Xr
,
Sr
*
Yr
,
Sr
*
Zr
],
[
Sg
*
Xg
,
Sg
*
Yg
,
Sg
*
Zg
],
[
Sb
*
Xb
,
Sb
*
Yb
,
Sb
*
Zb
]
];
if
(
to
==
"RGB"
){
return
dojox
.
math
.
inverse
(
result
);
}
return
result
;
};
this
.
epsilon
=
function
(
/* bool? */
useApprox
){
return
(
useApprox
||
typeof
(
useApprox
)
==
"undefined"
)
?
0.008856
:
216
/
24289
;
};
this
.
kappa
=
function
(
/* bool? */
useApprox
){
return
(
useApprox
||
typeof
(
useApprox
)
==
"undefined"
)
?
903.3
:
24389
/
27
;
};
this
.
convert
=
function
(
/* Object */
color
,
/* string */
from
,
/* string */
to
,
/* Object? */
kwArgs
){
if
(
converters
[
from
]
&&
converters
[
from
][
to
]){
return
converters
[
from
][
to
](
obj
,
kwArgs
);
}
console
.
warn
(
"dojox.color.Colorspace::convert: Can't convert "
,
color
,
" from "
,
from
,
" to "
,
to
,
"."
);
};
})();
// More dojox.color and dojox.color.Color extensions
dojo
.
mixin
(
dojox
.
color
,
{
fromXYZ
:
function
(
/* Object */
xyz
,
/* Object?*/
kwArgs
){
kwArgs
=
kwArgs
||
{};
var
p
=
dojox
.
color
.
Colorspace
.
primaries
(
kwArgs
);
var
m
=
dojox
.
color
.
Colorspace
.
matrix
(
"RGB"
,
p
);
var
rgb
=
dojox
.
math
.
matrix
.
mutliply
([[
xyz
.
X
,
xyz
.
Y
,
xyz
.
Z
]],
m
);
var
r
=
rgb
[
0
][
0
],
g
=
rgb
[
0
][
1
],
b
=
rgb
[
0
][
2
];
if
(
p
.
profile
==
"sRGB"
){
var
R
=
(
r
>
0.0031308
)
?
(
1.055
*
Math
.
pow
(
r
,
1
/
2.4
))
-
0.055
:
12.92
*
r
;
var
G
=
(
g
>
0.0031308
)
?
(
1.055
*
Math
.
pow
(
g
,
1
/
2.4
))
-
0.055
:
12.92
*
g
;
var
B
=
(
b
>
0.0031308
)
?
(
1.055
*
Math
.
pow
(
b
,
1
/
2.4
))
-
0.055
:
12.92
*
b
;
}
else
{
var
R
=
Math
.
pow
(
r
,
1
/
p
.
gamma
),
G
=
Math
.
pow
(
g
,
1
/
p
.
gamma
),
B
=
Math
.
pow
(
b
,
1
/
p
.
gamma
);
}
return
new
dojox
.
color
.
Color
({
r
:
Math
.
floor
(
R
*
255
),
g
:
Math
.
floor
(
G
*
255
),
b
:
Math
.
floor
(
B
*
255
)
});
}
});
dojo
.
extend
(
dojox
.
color
.
Color
,
{
toXYZ
:
function
(
/* Object */
kwArgs
){
kwArgs
=
kwArgs
||
{};
var
p
=
dojox
.
color
.
Colorspace
.
primaries
(
kwArgs
);
var
m
=
dojox
.
color
.
Colorspace
.
matrix
(
"XYZ"
,
p
);
var
_r
=
this
.
r
/
255
,
_g
=
this
.
g
/
255
,
_b
=
this
.
b
/
255
;
if
(
p
.
profile
==
"sRGB"
){
var
r
=
(
_r
>
0.04045
)
?
Math
.
pow
(((
_r
+
0.055
)
/
1.055
),
2.4
)
:
_r
/
12.92
;
var
g
=
(
_g
>
0.04045
)
?
Math
.
pow
(((
_g
+
0.055
)
/
1.055
),
2.4
)
:
_g
/
12.92
;
var
b
=
(
_b
>
0.04045
)
?
Math
.
pow
(((
_b
+
0.055
)
/
1.055
),
2.4
)
:
_b
/
12.92
;
}
else
{
var
r
=
Math
.
pow
(
_r
,
p
.
gamma
),
g
=
Math
.
pow
(
_g
,
p
.
gamma
),
b
=
Math
.
pow
(
_b
,
p
.
gamma
);
}
var
xyz
=
dojox
.
math
.
matrix
([[
r
,
g
,
b
]],
m
);
return
{
X
:
xyz
[
0
][
0
],
Y
:
xyz
[
0
][
1
],
Z
:
xyz
[
0
][
2
]
};
// Object
}
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 02:35 (4 d, 13 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25681
Default Alt Text
Colorspace.js (24 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment