2 * Pixastic Lib - Laplace filter - 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.laplace = {
8 process : function(params) {
11 var invert = !!(params.options.invert);
12 var contrast = parseFloat(params.options.edgeStrength)||0;
14 var greyLevel = parseInt(params.options.greyLevel)||0;
18 if (Pixastic.Client.hasCanvasImageData()) {
19 var data = Pixastic.prepareData(params);
20 var dataCopy = Pixastic.prepareData(params, true)
30 var rect = params.options.rect;
37 var offsetY = (y-1)*w4;
39 var nextY = (y == h) ? y - 1 : y;
40 var prevY = (y == 1) ? 0 : y-2;
42 var offsetYPrev = prevY*w*4;
43 var offsetYNext = nextY*w*4;
47 var offset = offsetY + (x*4-4);
49 var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
50 var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
52 var r = ((-dataCopy[offsetPrev-4]
53 - dataCopy[offsetPrev]
54 - dataCopy[offsetPrev+4]
57 - dataCopy[offsetNext-4]
58 - dataCopy[offsetNext]
59 - dataCopy[offsetNext+4])
60 + dataCopy[offset] * 8)
63 var g = ((-dataCopy[offsetPrev-3]
64 - dataCopy[offsetPrev+1]
65 - dataCopy[offsetPrev+5]
68 - dataCopy[offsetNext-3]
69 - dataCopy[offsetNext+1]
70 - dataCopy[offsetNext+5])
71 + dataCopy[offset+1] * 8)
74 var b = ((-dataCopy[offsetPrev-2]
75 - dataCopy[offsetPrev+2]
76 - dataCopy[offsetPrev+6]
79 - dataCopy[offsetNext-2]
80 - dataCopy[offsetNext+2]
81 - dataCopy[offsetNext+6])
82 + dataCopy[offset+2] * 8)
85 var brightness = ((r + g + b)/3) + greyLevel;
88 if (brightness > 127) {
89 brightness += ((brightness + 1) - 128) * contrast;
90 } else if (brightness < 127) {
91 brightness -= (brightness + 1) * contrast;
95 brightness = 255 - brightness;
97 if (brightness < 0 ) brightness = 0;
98 if (brightness > 255 ) brightness = 255;
100 data[offset] = data[offset+1] = data[offset+2] = brightness;
108 checkSupport : function() {
109 return Pixastic.Client.hasCanvasImageData();