123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /**
- * @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;
- });
|