diff --git a/index.html b/index.html
index bba30f6..ed90286 100644
--- a/index.html
+++ b/index.html
@@ -24,6 +24,8 @@
+
+
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/command.js b/scripts/command.js
index 010a2ce..c703cdf 100644
--- a/scripts/command.js
+++ b/scripts/command.js
@@ -6,6 +6,7 @@ function Command(content)
function raster(array) // @ {50w}x100
{
+ return array;
var str = array.join(" ");
var m = str.replace(/(\{(.*)\})/g, function(a) {
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.eval.js b/scripts/modules/filter.eval.js
new file mode 100644
index 0000000..695e29a
--- /dev/null
+++ b/scripts/modules/filter.eval.js
@@ -0,0 +1,27 @@
+Filter.prototype.filter_eval = function(pixels = this.pixels(),p = null)
+{
+ console.log("working");
+
+ // : eval {x} % 100 == 0
+
+ var data = pixels.data;
+
+ for (var i = 0; i < data.length; i += 4) {
+
+ var x = (i/4) % pixels.width;
+ var y = Math.floor((i/4)/pixels.width);
+
+ var q = (x % parseInt(p[0]) === 0 && y % parseInt(p[1]) === 0);
+
+ if(q === true){
+ data[i] = 255; // red
+ data[i + 1] = 0; // green
+ data[i + 2] = 0; // blue
+ data[i + 3] = 255; // alpha?
+ }
+ }
+
+ ronin.canvas.clear();
+ ronin.canvas.context().putImageData(pixels, 0, 0, 0, 0, pixels.width, pixels.height);
+ console.log("done.");
+}
\ No newline at end of file
diff --git a/scripts/modules/filter.js b/scripts/modules/filter.js
index 59382bb..e899493 100644
--- a/scripts/modules/filter.js
+++ b/scripts/modules/filter.js
@@ -21,6 +21,11 @@ function Filter(element)
break;
case "invert":
this.filter_invert(this.pixels(),p);
+ case "eval":
+ this.filter_eval(this.pixels(),p);
+ break;
+ case "balance":
+ this.filter_balance(this.pixels(),p);
break;
}
}