diff --git a/actions/colorhistogram.js b/actions/colorhistogram.js new file mode 100755 index 0000000..7b52cb8 --- /dev/null +++ b/actions/colorhistogram.js @@ -0,0 +1,82 @@ +/* + * Pixastic Lib - Histogram - v0.1.0 + * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ + * License: [http://www.pixastic.com/lib/license.txt] + */ + + +Pixastic.Actions.colorhistogram = { + + array256 : function(default_value) { + arr = []; + for (var i=0; i<256; i++) { arr[i] = default_value; } + return arr + }, + + process : function(params) { + var values = []; + if (typeof params.options.returnValue != "object") { + params.options.returnValue = {rvals:[], gvals:[], bvals:[]}; + } + var paint = !!(params.options.paint); + + var returnValue = params.options.returnValue; + if (typeof returnValue.values != "array") { + returnValue.rvals = []; + returnValue.gvals = []; + returnValue.bvals = []; + } + + if (Pixastic.Client.hasCanvasImageData()) { + var data = Pixastic.prepareData(params); + params.useData = false; + + var rvals = this.array256(0); + var gvals = this.array256(0); + var bvals = this.array256(0); + + var rect = params.options.rect; + + var p = rect.width*rect.height; + var pix = p*4; + while (p--) { + rvals[data[pix-=4]]++; + gvals[data[pix+1]]++; + bvals[data[pix+2]]++; + } + + returnValue.rvals = rvals; + returnValue.gvals = gvals; + returnValue.bvals = bvals; + + if (paint) { + var ctx = params.canvas.getContext("2d"); + var vals = [rvals, gvals, bvals]; + for (var v=0;v<3;v++) { + var yoff = (v+1) * params.height / 3; + var maxValue = 0; + for (var i=0;i<256;i++) { + if (vals[v][i] > maxValue) + maxValue = vals[v][i]; + } + var heightScale = params.height / 3 / maxValue; + var widthScale = params.width / 256; + if (v==0) ctx.fillStyle = "rgba(255,0,0,0.5)"; + else if (v==1) ctx.fillStyle = "rgba(0,255,0,0.5)"; + else if (v==2) ctx.fillStyle = "rgba(0,0,255,0.5)"; + for (var i=0;i<256;i++) { + ctx.fillRect( + i * widthScale, params.height - heightScale * vals[v][i] - params.height + yoff, + widthScale, vals[v][i] * heightScale + ); + } + } + } + return true; + } + }, + + checkSupport : function() { + return Pixastic.Client.hasCanvasImageData(); + } +} \ No newline at end of file diff --git a/actions/flip.js b/actions/flip.js new file mode 100755 index 0000000..4a2a483 --- /dev/null +++ b/actions/flip.js @@ -0,0 +1,34 @@ +/* + * Pixastic Lib - Flip - v0.1.0 + * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ + * License: [http://www.pixastic.com/lib/license.txt] + */ + +Pixastic.Actions.flip = { + process : function(params) { + var rect = params.options.rect; + var copyCanvas = document.createElement("canvas"); + copyCanvas.width = rect.width; + copyCanvas.height = rect.height; + copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height); + + var ctx = params.canvas.getContext("2d"); + ctx.clearRect(rect.left, rect.top, rect.width, rect.height); + + if (params.options.axis == "horizontal") { + ctx.scale(-1,1); + ctx.drawImage(copyCanvas, -rect.left-rect.width, rect.top, rect.width, rect.height) + } else { + ctx.scale(1,-1); + ctx.drawImage(copyCanvas, rect.left, -rect.top-rect.height, rect.width, rect.height) + } + + params.useData = false; + + return true; + }, + checkSupport : function() { + return Pixastic.Client.hasCanvas(); + } +} +