74 lines
1.9 KiB
JavaScript
Executable file
74 lines
1.9 KiB
JavaScript
Executable file
/*
|
|
* Pixastic Lib - Histogram - v0.1.1
|
|
* Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
|
|
* License: [http://www.pixastic.com/lib/license.txt]
|
|
*/
|
|
|
|
Pixastic.Actions.histogram = {
|
|
process : function(params) {
|
|
|
|
var average = !!(params.options.average && params.options.average != "false");
|
|
var paint = !!(params.options.paint && params.options.paint != "false");
|
|
var color = params.options.color || "rgba(255,255,255,0.5)";
|
|
var values = [];
|
|
if (typeof params.options.returnValue != "object") {
|
|
params.options.returnValue = {values:[]};
|
|
}
|
|
var returnValue = params.options.returnValue;
|
|
if (typeof returnValue.values != "array") {
|
|
returnValue.values = [];
|
|
}
|
|
values = returnValue.values;
|
|
|
|
if (Pixastic.Client.hasCanvasImageData()) {
|
|
var data = Pixastic.prepareData(params);
|
|
params.useData = false;
|
|
|
|
for (var i=0;i<256;i++) {
|
|
values[i] = 0;
|
|
}
|
|
|
|
var rect = params.options.rect;
|
|
var p = rect.width * rect.height;
|
|
|
|
var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3;
|
|
var round = Math.round;
|
|
|
|
if (average) {
|
|
while (p--) {
|
|
values[ round((data[pix-=4]+data[pix+1]+data[pix+2])/3) ]++;
|
|
}
|
|
} else {
|
|
while (p--) {
|
|
values[ round(data[pix-=4]*0.3 + data[pix+1]*0.59 + data[pix+2]*0.11) ]++;
|
|
}
|
|
}
|
|
|
|
if (paint) {
|
|
var maxValue = 0;
|
|
for (var i=0;i<256;i++) {
|
|
if (values[i] > maxValue) {
|
|
maxValue = values[i];
|
|
}
|
|
}
|
|
var heightScale = params.height / maxValue;
|
|
var widthScale = params.width / 256;
|
|
var ctx = params.canvas.getContext("2d");
|
|
ctx.fillStyle = color;
|
|
for (var i=0;i<256;i++) {
|
|
ctx.fillRect(
|
|
i * widthScale, params.height - heightScale * values[i],
|
|
widthScale, values[i] * heightScale
|
|
);
|
|
}
|
|
}
|
|
|
|
returnValue.values = values;
|
|
|
|
return true;
|
|
}
|
|
},
|
|
checkSupport : function() {
|
|
return Pixastic.Client.hasCanvasImageData();
|
|
}
|
|
}
|