Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / removenoise.js
blob042033ad9a978d31e484f94b3d322ec1faa58ae8
1 /*
2  * Pixastic Lib - Remove noise - 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]
5  */
7 Pixastic.Actions.removenoise = {
8         process : function(params) {
10                 if (Pixastic.Client.hasCanvasImageData()) {
11                         var data = Pixastic.prepareData(params);
13                         var rect = params.options.rect;
14                         var w = rect.width;
15                         var h = rect.height;
17                         var w4 = w*4;
18                         var y = h;
19                         do {
20                                 var offsetY = (y-1)*w4;
22                                 var nextY = (y == h) ? y - 1 : y;
23                                 var prevY = (y == 1) ? 0 : y-2;
25                                 var offsetYPrev = prevY*w*4;
26                                 var offsetYNext = nextY*w*4;
28                                 var x = w;
29                                 do {
30                                         var offset = offsetY + (x*4-4);
32                                         var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
33                                         var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
35                                         var minR, maxR, minG, maxG, minB, maxB;
37                                         minR = maxR = data[offsetPrev];
38                                         var r1 = data[offset-4], r2 = data[offset+4], r3 = data[offsetNext];
39                                         if (r1 < minR) minR = r1;
40                                         if (r2 < minR) minR = r2;
41                                         if (r3 < minR) minR = r3;
42                                         if (r1 > maxR) maxR = r1;
43                                         if (r2 > maxR) maxR = r2;
44                                         if (r3 > maxR) maxR = r3;
46                                         minG = maxG = data[offsetPrev+1];
47                                         var g1 = data[offset-3], g2 = data[offset+5], g3 = data[offsetNext+1];
48                                         if (g1 < minG) minG = g1;
49                                         if (g2 < minG) minG = g2;
50                                         if (g3 < minG) minG = g3;
51                                         if (g1 > maxG) maxG = g1;
52                                         if (g2 > maxG) maxG = g2;
53                                         if (g3 > maxG) maxG = g3;
55                                         minB = maxB = data[offsetPrev+2];
56                                         var b1 = data[offset-2], b2 = data[offset+6], b3 = data[offsetNext+2];
57                                         if (b1 < minB) minB = b1;
58                                         if (b2 < minB) minB = b2;
59                                         if (b3 < minB) minB = b3;
60                                         if (b1 > maxB) maxB = b1;
61                                         if (b2 > maxB) maxB = b2;
62                                         if (b3 > maxB) maxB = b3;
64                                         if (data[offset] > maxR) {
65                                                 data[offset] = maxR;
66                                         } else if (data[offset] < minR) {
67                                                 data[offset] = minR;
68                                         }
69                                         if (data[offset+1] > maxG) {
70                                                 data[offset+1] = maxG;
71                                         } else if (data[offset+1] < minG) {
72                                                 data[offset+1] = minG;
73                                         }
74                                         if (data[offset+2] > maxB) {
75                                                 data[offset+2] = maxB;
76                                         } else if (data[offset+2] < minB) {
77                                                 data[offset+2] = minB;
78                                         }
80                                 } while (--x);
81                         } while (--y);
83                         return true;
84                 }
85         },
86         checkSupport : function() {
87                 return Pixastic.Client.hasCanvasImageData();
88         }