/** * @file 主要功能 * @author clmtulip(车丽美, clmtulip@gmail.com) liyong(liyong1239@163.com) */ define(function (require) { function ZeroArray(option) { this.defaultOption = {type: 'RECT'}; this._init(option); } ZeroArray.prototype = { RECT: '_calculateRect', _init: function (option) { this._initOption(option); this._initCanvas(); }, _initOption: function (option) { for (k in option) { this.defaultOption[k] = option[k]; } }, _initCanvas: function () { var canvas = document.createElement("canvas"); canvas.width = 1; canvas.height = 1; var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); canvas.width = this.defaultOption.width; canvas.height = this.defaultOption.height; if (canvas.getContext) { var ctx = canvas.getContext('2d'); } this.canvas = canvas; this.ctx = ctx; this.ratio = ratio; }, /**执行计算, 并返回 * * @param callback * 返回 {initarr, area, maxHit, maxWit} 给callback */ calculate: function (callback, callbackObj) { var calType = this.defaultOption.type, calmethod = this[calType]; this[calmethod].call(this, callback, callbackObj); }, /** * callback 函数的 正确执行 * @param result 计算后的结果,{initarr, area, maxHit, maxWit} * @param callback 计算成功之后的回调函数 * @param callbackObj 回调函数的执行作用域 * @private */ _calculateReturn: function (result, callback, callbackObj) { callback.call(callbackObj, result); }, _calculateRect: function (callback, callbackObj) { var result = {}, width = this.defaultOption.width >> 5 << 5, height = this.defaultOption.height; // 初始化数组 result.initarr = this._rectZeroArray(width * height); // 总面积 result.area = width * height; // 最大高度 result.maxHit = height; // 最大宽度 result.maxWit = width; // 边界 result.imgboard = this._rectBoard(width, height); this._calculateReturn(result, callback, callbackObj); }, _rectBoard: function (width, height) { var row = []; for (var i = 0; i < height; i++) { row.push({ y: i, start: 0, end: width }) } var cloumn = []; for (var i = 0; i < width; i++) { cloumn.push({ x: i, start: 0, end: height }) } return {row: row, cloumn: cloumn}; }, _rectZeroArray: function (num) { var a = [], n = num, i = -1; while (++i < n) a[i] = 0; return a; } }; return ZeroArray; });