Buffer部分引用方法 通过Buffer的部分引用,我们可以得到矩阵的部分引用,比如我们可以利用这个来获取一个像素点的数据数组,而改变这个数组中的值,相应的矩阵数据也会改变;再比如我们可以以其他数据类型的方式读取数据。而这些对于普通Array是不能实现的。下面我们来看一下at方法的实现: 复制代码 代码如下: Mat.prototype.at = function(__type, __x, __y){ var type = __type, x = __x || 0, y = __y || 0, rowLen = this.col * this.channel * this.bytes, len = 1; if(type.indexOf("Vec") > -1){ var temp = __type.match(/Vec(d+)([a-z])/); len = parseInt(temp[1]); switch(temp[2]){ case "b": type = "uchar"; break; case "s": type = "short"; break; case "i": type = "int"; break; case "f": type = "float"; break; case "d": type = "double"; break; } } switch(type){ case "uchar": return new Uint8Array(this.buffer, (y * rowLen + x), len); break; case "short": return new Int16Array(this.buffer, (y * rowLen + x * 2), len); break; case "int": return new Int32Array(this.buffer, (y * rowLen + x * 4), len); break; case "float": return new Float32Array(this.buffer, (y * rowLen + x * 4), len); break; case "doulble": return new Float64Array(this.buffer, (y * rowLen + x * 8), len); break; default: console.error("不支持数据类型"); } };
如果你对ArrayBuffer和TypedArray还不太清楚,可以参考:HTML5 中的新数组。 String type - 需要返回的数据类型。支持: uchar 无符号8位整数 short 有符号16位整数 int 有符号32位整数 float 有符号32位浮点数 double 有符号64位浮点数