updated Levels filter and test

This commit is contained in:
Eric Rowell
2014-01-02 22:58:36 -08:00
parent bbfbadfee2
commit a238cf5817
3 changed files with 26 additions and 171 deletions

View File

@@ -4,54 +4,35 @@
* Levels Filter. Adjusts the channels so that there are no more
* than n different values for that channel. This is also applied
* to the alpha channel.
* Performs w*h pixel reads and w*h pixel writes.
* @function
* @author ippo615
* @memberof Kinetic.Filters
* @param {ImageData} src, the source image data (what will be transformed)
* @param {ImageData} dst, the destination image data (where it will be saved)
* @param {Object} opt
* @param {Number} [opt.quantizationLevels], the number of values allowed for each
* channel. Between 2 and 255. Default is 2.
* @param {Object} imageData
*/
var Levels = function (src, dst, opt) {
var nLevels = Math.round(opt.quantizationLevels || 2);
var srcPixels = src.data,
dstPixels = dst.data,
nPixels = srcPixels.length,
scale = (255 / nLevels),
i;
for (i = 0; i < nPixels; i += 1) {
dstPixels[i] = Math.floor(srcPixels[i] / scale) * scale;
Kinetic.Filters.Levels = function (imageData) {
// level must be between 1 and 255
var level = Math.round(this.level() * 254) + 1,
data = imageData.data,
len = data.length,
scale = (255 / level),
i;
for (i = 0; i < len; i += 1) {
data[i] = Math.floor(data[i] / scale) * scale;
}
};
Kinetic.Filters.Levels = function(src,dst,opt){
if( this === Kinetic.Filters ){
Levels(src, dst||src, opt );
}else{
Levels.call(this, src, dst||src, {
quantizationLevels: this.getQuantizationLevels()
});
}
};
Kinetic.Factory.addFilterGetterSetter(Kinetic.Node, 'quantizationLevels', 4);
Kinetic.Factory.addFilterGetterSetter(Kinetic.Node, 'level', 0.5);
/**
* get quantization levels. Returns the number of unique levels for each color
* channel. 2 is the minimum, 255 is the maximum. For Kinetic.Filters.Levels
* @name getQuantizationLevels
* get/set levels. Must be a number between 0 and 1
* @name level
* @method
* @memberof Kinetic.Image.prototype
* @memberof Kinetic.Node.prototype
* @param {Number} level between 0 and 1
* @returns {Number}
*/
/**
* get quantization levels. Sets the number of unique levels for each color
* channel. 2 is the minimum, 255 is the maximum. For Kinetic.Filters.Levels
* @name setQuantizationLevels
* @method
* @memberof Kinetic.Image.prototype
*/
})();