Skip to content

Commit 82038aa

Browse files
author
Marakaido
committed
Add blur and sharpen tools
1 parent 534bfbc commit 82038aa

File tree

2 files changed

+48
-14
lines changed

2 files changed

+48
-14
lines changed

filters.js

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,58 @@ Filters.negative = function(context, x, y, width, height)
3434
context.putImageData(imageData, 0, 0);
3535
};
3636

37-
Filters.convolute = function(kernel, imageData)
37+
//Updates imageData object to contain convoluted result of its previous content with kernel matrix
38+
//kernel - one-dimensional array representing 3x3 matrix
39+
Filters.convolute = function(imageData, kernel)
3840
{
3941
var data = imageData.data;
4042
var result = new Array();
41-
var getRedPosition = function(i, j, imageData)
42-
{
43-
return imageData.data[j * imageData.width * 4 + i*4];
44-
}
4543
for(var i = 1; i < imageData.height-1; i++)
4644
{
4745
for(var j = 1; j < imageData.width-1; j++)
4846
{
49-
var upperRow = getRedPosition(i-1, j-1);
50-
var middleRow = getRedPosition(i-1, j);
51-
var middleRow = getRedPosition(i-1, j+1);
52-
//var r = data[upperRow];
53-
//var g = ;
54-
//var b = ;
55-
//var a = ;
56-
result[pos] = value;
47+
var r = g = b = a = 0;
48+
for(var k = 0; k < 3; k++)
49+
{
50+
for(var l = 0; l < 3; l++)
51+
{
52+
var dataRedPosition = ((i-1 + k) * imageData.width + j-1 + l) * 4;
53+
var kernelMultiplier = kernel[k*3 + l];
54+
r += kernelMultiplier * data[dataRedPosition];
55+
g += kernelMultiplier * data[dataRedPosition + 1];
56+
b += kernelMultiplier * data[dataRedPosition + 2];
57+
a += kernelMultiplier * data[dataRedPosition + 3];
58+
}
59+
}
60+
61+
var resultRedPosition = (i * imageData.width + j) * 4;
62+
result[resultRedPosition] = r;
63+
result[resultRedPosition + 1] = g;
64+
result[resultRedPosition + 2] = b;
65+
result[resultRedPosition + 3] = a;
5766
}
5867
}
59-
}
68+
69+
for(var i = 0; i < data.length; i++)
70+
{
71+
data[i] = result[i];
72+
}
73+
}
74+
75+
Filters.blur = function(context, x, y, width, height)
76+
{
77+
var imageData = context.getImageData(x, y, width, height);
78+
for(var i = 0; i < 1; i++) Filters.convolute(imageData, [1/9, 1/9, 1/9,
79+
1/9, 1/9, 1/9,
80+
1/9, 1/9, 1/9]);
81+
context.putImageData(imageData, 0, 0);
82+
};
83+
84+
Filters.sharpen = function(context, x, y, width, height)
85+
{
86+
var imageData = context.getImageData(x, y, width, height);
87+
for(var i = 0; i < 1; i++) Filters.convolute(imageData, [0, -1, 0,
88+
-1, 5, -1,
89+
0, -1, 0]);
90+
context.putImageData(imageData, 0, 0);
91+
};

index.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
<div>
5757
<button onclick="GUI.filterButtonClicked(Filters.grayscale)">Grayscale</button>
5858
<button onclick="GUI.filterButtonClicked(Filters.negative)">Negative</button>
59+
<button onclick="GUI.filterButtonClicked(Filters.blur)">Blur</button>
60+
<button onclick="GUI.filterButtonClicked(Filters.sharpen)">Sharpen</button>
5961
</div>
6062
</div>
6163
</body>

0 commit comments

Comments
 (0)