diff --git a/index.html b/index.html index 16327b9..00152bc 100644 --- a/index.html +++ b/index.html @@ -24,6 +24,7 @@ + diff --git a/media/filter.color.jpg b/media/filter.color.jpg new file mode 100644 index 0000000..eb15803 Binary files /dev/null and b/media/filter.color.jpg differ diff --git a/scripts/modules/filter.balance.js b/scripts/modules/filter.balance.js new file mode 100644 index 0000000..fd6e5e2 --- /dev/null +++ b/scripts/modules/filter.balance.js @@ -0,0 +1,46 @@ +Filter.prototype.filter_balance = function(pixels = this.pixels(),p = null) +{ + // / media/filter.color.jpg + // : balance 0.5 2.4 1.2 + + p[0] = parseFloat(p[0]); + p[1] = p[1] ? parseFloat(p[1]) : parseFloat(p[0]); + p[2] = p[2] ? parseFloat(p[2]) : parseFloat(p[0]); + + var data = pixels.data; + + // Multiply + if(p[0] % 1 !== 0 && p[1] % 1 !== 0 && p[2] % 1 !== 0){ + console.log("Multi"); + for (var i = 0; i < data.length; i += 4) { + data[i] = data[i] * p[0]; // red + data[i + 1] = data[i + 1] * p[1]; // green + data[i + 2] = data[i + 2] * p[2]; // blue + + // Clamp + data[i] = data[i] < 255 ? data[i] : 255; + data[i + 1] = data[i + 1] < 255 ? data[i + 1] : 255; + data[i + 2] = data[i + 2] < 255 ? data[i + 2] : 255; + } + } + // Add + else{ + p[0] = parseInt(p[0]); + p[1] = p[1] ? parseInt(p[1]) : parseInt(p[0]); + p[2] = p[2] ? parseInt(p[2]) : parseInt(p[0]); + + for (i = 0; i < data.length; i += 4) { + data[i] = data[i] + p[0]; // red + data[i + 1] = data[i + 1] + p[1]; // green + data[i + 2] = data[i + 2] + p[2]; // blue + + // Clamp + data[i] = data[i] < 255 ? data[i] : 255; + data[i + 1] = data[i + 1] < 255 ? data[i + 1] : 255; + data[i + 2] = data[i + 2] < 255 ? data[i + 2] : 255; + } + } + + ronin.canvas.clear(); + ronin.canvas.context().putImageData(pixels, 0, 0, 0, 0, pixels.width, pixels.height); +} \ No newline at end of file diff --git a/scripts/modules/filter.js b/scripts/modules/filter.js index 9625f74..e71aed3 100644 --- a/scripts/modules/filter.js +++ b/scripts/modules/filter.js @@ -22,6 +22,9 @@ function Filter(element) case "eval": this.filter_eval(this.pixels(),p); break; + case "balance": + this.filter_balance(this.pixels(),p); + break; } }