/* * ColorFilter * Visit http://createjs.com/ for documentation, updates and examples. * * Copyright (c) 2010 gskinner.com, inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ // namespace: this.createjs = this.createjs||{}; (function() { /** * Applies color transforms. * * See {{#crossLink "Filter"}}{{/crossLink}} for an example of how to apply filters. * @class ColorFilter * @constructor * @extends Filter * @param {Number} redMultiplier * @param {Number} greenMultiplier * @param {Number} blueMultiplier * @param {Number} alphaMultiplier * @param {Number} redOffset * @param {Number} greenOffset * @param {Number} blueOffset * @param {Number} alphaOffset **/ var ColorFilter = function(redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier, redOffset, greenOffset, blueOffset, alphaOffset) { this.initialize(redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier, redOffset, greenOffset, blueOffset, alphaOffset); } var p = ColorFilter.prototype = new createjs.Filter(); // public properties: /** * Red channel multiplier. * @property redMultiplier * @type Number **/ p.redMultiplier = 1; /** * Green channel multiplier. * @property greenMultiplier * @type Number **/ p.greenMultiplier = 1; /** * Blue channel multiplier. * @property blueMultiplier * @type Number **/ p.blueMultiplier = 1; /** * Alpha channel multiplier. * @property redMultiplier * @type Number **/ p.alphaMultiplier = 1; /** * Red channel offset (added to value). * @property redOffset * @type Number **/ p.redOffset = 0; /** * Green channel offset (added to value). * @property greenOffset * @type Number **/ p.greenOffset = 0; /** * Blue channel offset (added to value). * @property blueOffset * @type Number **/ p.blueOffset = 0; /** * Alpha channel offset (added to value). * @property alphaOffset * @type Number **/ p.alphaOffset = 0; // constructor: /** * Initialization method. * @method initialize * @protected **/ p.initialize = function(redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier, redOffset, greenOffset, blueOffset, alphaOffset) { this.redMultiplier = redMultiplier != null ? redMultiplier : 1; this.greenMultiplier = greenMultiplier != null ? greenMultiplier : 1; this.blueMultiplier = blueMultiplier != null ? blueMultiplier : 1; this.alphaMultiplier = alphaMultiplier != null ? alphaMultiplier : 1; this.redOffset = redOffset || 0; this.greenOffset = greenOffset || 0; this.blueOffset = blueOffset || 0; this.alphaOffset = alphaOffset || 0; } // public methods: /** * Applies the filter to the specified context. * @method applyFilter * @param {CanvasRenderingContext2D} ctx The 2D context to use as the source. * @param {Number} x The x position to use for the source rect. * @param {Number} y The y position to use for the source rect. * @param {Number} width The width to use for the source rect. * @param {Number} height The height to use for the source rect. * @param {CanvasRenderingContext2D} targetCtx Optional. The 2D context to draw the result to. Defaults to the context passed to ctx. * @param {Number} targetX Optional. The x position to draw the result to. Defaults to the value passed to x. * @param {Number} targetY Optional. The y position to draw the result to. Defaults to the value passed to y. * @return {Boolean} **/ p.applyFilter = function(ctx, x, y, width, height, targetCtx, targetX, targetY) { targetCtx = targetCtx || ctx; if (targetX == null) { targetX = x; } if (targetY == null) { targetY = y; } try { var imageData = ctx.getImageData(x, y, width, height); } catch(e) { //if (!this.suppressCrossDomainErrors) throw new Error("unable to access local image data: " + e); return false; } var data = imageData.data; var l = data.length; for (var i=0; i