2 * Pixastic Lib - HSL Adjust - v0.1.0
3 * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
4 * MIT License [http://www.opensource.org/licenses/mit-license.php]
7 Pixastic.Actions.hsl = {
8 process : function(params) {
10 var hue = parseInt(params.options.hue,10)||0;
11 var saturation = (parseInt(params.options.saturation,10)||0) / 100;
12 var lightness = (parseInt(params.options.lightness,10)||0) / 100;
15 // this seems to give the same result as Photoshop
17 var satMul = 1+saturation;
19 var satMul = 1+saturation*2;
22 hue = (hue%360) / 360;
27 var light255 = lightness * 255;
28 var lightp1 = 1 + lightness;
29 var lightm1 = 1 - lightness;
30 if (Pixastic.Client.hasCanvasImageData()) {
31 var data = Pixastic.prepareData(params);
33 var rect = params.options.rect;
41 var offsetY = (y-1)*w4;
44 var offset = offsetY + (x*4-4);
47 var g = data[offset+1];
48 var b = data[offset+2];
50 if (hue != 0 || saturation != 0) {
51 // ok, here comes rgb to hsl + adjust + hsl to rgb, all in one jumbled mess.
52 // It's not so pretty, but it's been optimized to get somewhat decent performance.
53 // The transforms were originally adapted from the ones found in Graphics Gems, but have been heavily modified.
61 var l = (ms+vs)/255 * 0.5;
65 var s = vm / (vs+ms) * satMul;
69 var s = vm / (510-vs-ms) * satMul;
75 var h = 5 + ((vs-b)/vm) + hue6;
77 var h = 1 - ((vs-g)/vm) + hue6;
80 var h = 1 + ((vs-r)/vm) + hue6;
82 var h = 3 - ((vs-b)/vm) + hue6;
85 var h = 3 + ((vs-g)/vm) + hue6;
87 var h = 5 - ((vs-r)/vm) + hue6;
94 case 0: r = v*255; g = (m+((v-m)*(h-sextant)))*255; b = m*255; break;
95 case 1: r = (v-((v-m)*(h-sextant)))*255; g = v*255; b = m*255; break;
96 case 2: r = m*255; g = v*255; b = (m+((v-m)*(h-sextant)))*255; break;
97 case 3: r = m*255; g = (v-((v-m)*(h-sextant)))*255; b = v*255; break;
98 case 4: r = (m+((v-m)*(h-sextant)))*255; g = m*255; b = v*255; break;
99 case 5: r = v*255; g = m*255; b = (v-((v-m)*(h-sextant)))*255; break;
109 } else if (lightness > 0) {
110 r = r * lightm1 + light255;
111 g = g * lightm1 + light255;
112 b = b * lightm1 + light255;
118 if (r > 255) r = 255;
119 if (g > 255) g = 255;
120 if (b > 255) b = 255;
131 checkSupport : function() {
132 return Pixastic.Client.hasCanvasImageData();