Ajout code convolution
This commit is contained in:
parent
c422eb3215
commit
7984c2712b
|
@ -202,3 +202,69 @@ reactiveContrast.apply = function(){
|
||||||
/* (2) Copie le résultat sur le `<canvas>` */
|
/* (2) Copie le résultat sur le `<canvas>` */
|
||||||
o.context.putImageData(imageData, 0, 0);
|
o.context.putImageData(imageData, 0, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* PRODUIT DE CONVOLUTION
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Filter.convolution = function(data, options){
|
||||||
|
|
||||||
|
options.kernel = !options.hasOwnProperty('kernel') ? [] : options.kernel;
|
||||||
|
|
||||||
|
console.log(options.kernel);
|
||||||
|
|
||||||
|
/* [0] Initialisation
|
||||||
|
=========================================================*/
|
||||||
|
// Offset pour ne pas dépasser
|
||||||
|
var offset = {
|
||||||
|
y: parseInt(options.kernel.length/2), // On calcule l'offset sur y (pour que le kernel ne déborde pas)
|
||||||
|
x: parseInt(options.kernel[0].length/2) // On calcule l'offset sur x (pour que le kernel ne déborde pas)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Front buffer (copie buffer)
|
||||||
|
var original = data.buffer.slice(0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Pour chaque pixel de la map
|
||||||
|
=========================================================*/
|
||||||
|
for( var y = offset.y ; y < data.height ; y++ ){
|
||||||
|
for( var x = offset.x ; x < data.width ; x++ ){
|
||||||
|
|
||||||
|
/* [2] Pour chaque pixel du @kernel
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Contiendra le compte final */
|
||||||
|
var convolved = {
|
||||||
|
r: 0x00,
|
||||||
|
g: 0x00,
|
||||||
|
b: 0x00,
|
||||||
|
a: 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
for( var ky = -offset.y ; ky <= offset.y ; ky++ ){
|
||||||
|
for( var kx = -offset.x ; kx <= offset.x ; kx++ ){
|
||||||
|
|
||||||
|
var coeff = options.kernel[offset.y+ky][offset.x+kx]; // Valeur du kernel
|
||||||
|
var sIndex = 4*( (y+ky)*data.width + (x+kx)); // indice source
|
||||||
|
|
||||||
|
convolved.r += original[sIndex+0] * coeff;
|
||||||
|
convolved.g += original[sIndex+1] * coeff;
|
||||||
|
convolved.b += original[sIndex+2] * coeff;
|
||||||
|
convolved.a += original[sIndex+3] * coeff;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On applique la valeur sur le buffer de destination */
|
||||||
|
var dIndex = 4*(y*data.width + x); // indice destination
|
||||||
|
data.buffer[dIndex+0] = convolved.r;
|
||||||
|
data.buffer[dIndex+1] = convolved.g;
|
||||||
|
data.buffer[dIndex+2] = convolved.b;
|
||||||
|
data.buffer[dIndex+3] = convolved.a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue