@@ -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+ } ;
0 commit comments