Brought back color balance filter

This commit is contained in:
Devine Lu Linvega
2017-01-18 11:10:03 -07:00
parent 2bca083af7
commit 991b4753fe
5 changed files with 54 additions and 47 deletions

View File

@@ -1,46 +0,0 @@
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.surface.context().putImageData(pixels, 0, 0, 0, 0, pixels.width, pixels.height);
}

View File

@@ -0,0 +1,47 @@
function Filter_Balance()
{
Filter.call(this);
this.parameters = [Color];
this.render = function(cmd)
{
if(!cmd.color()){ return; }
if(!cmd.color().rgb()){ return; }
this.draw(ronin.surface.active_layer.context(),cmd.color().rgb());
}
this.preview = function(cmd)
{
if(!cmd.color()){ return; }
if(!cmd.color().rgb()){ return; }
this.draw(ronin.render.layer.context(),cmd.color().rgb());
}
this.draw = function(context = this.context(), color_rgb)
{
var imageObj = new Image();
imageObj.src = ronin.surface.active_layer.element.toDataURL('image/png');
var w = ronin.surface.size.width;
var h = ronin.surface.size.height;
var originalData = ronin.surface.active_layer.context().getImageData(0, 0, w*2, h*2);
var data = originalData.data;
var r = (color_rgb.r / 255) + 0.5;
var g = (color_rgb.g / 255) + 0.5;
var b = (color_rgb.b / 255) + 0.5;
for(var i = 0; i < data.length; i += 4) {
data[i] = data[i] * r;
data[i + 1] = data[i + 1] * g;
data[i + 2] = data[i + 2] * b;
}
ronin.render.layer.clear();
context.putImageData(originalData, 0, 0);
}
}