大文字 R、G、 B、A はそれぞれ各チャネルの値を表し、最初の添え字は行番号を表し、2 番目の添え字は列番号を表します。つまり、k 行 j 列の G チャネル値は Gkj です。
バッファの部分参照を通じて、行列の部分参照を取得できます。これを使用してピクセル データ配列を取得でき、この配列の値を変更すると、対応する行列データも変更されます。別の例として、他のデータ型のデータを読み取ることができます。これらは通常の配列では実現できません。 at メソッドの実装を見てみましょう:
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";
ブレーク;
ケース "f":
type = "float";
case "d":
type = "double";
}
switch(type){
case "uchar":
return new Uint8Array(this.buffer, (y * rowLen x), len); "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 "double":
return new Float64Array(this.buffer, (y * rowLen x * 8), len);
break;
console. error("サポートされていないデータ型")
}
};
ArrayBuffer と TypedArray についてよくわからない場合は、「HTML5 の新しい配列」を参照してください。
文字列型 - 返されるデータ型。サポート:
uchar 符号なし 8 ビット整数
short 符号付き 16 ビット整数
int 符号付き 32 ビット整数
float 符号付き 32 ビット浮動小数点数
二重符号付き 64 ビット浮動小数点数値
Vec ベクトル形式 ベクトル形式の文字列のスペルは次のとおりです: Vec (型) (数値)、たとえば、Vecb4 は 4 つの符号なし 8 ビット整数です。ピクセル データの取得方法。たとえば、マットの行 j と列 k のピクセル データを取得するには、次のコマンドを使用できます。
mat.at("Vecb4", j, k);
int x - 行数取得する要素の行列内。
int y - 取得する要素の行列の列数。
getRow メソッドと getCol メソッド at の実装メソッドと同様に、特定の行または列を取得するメソッドを簡単に記述できます:
Mat.prototype.getRow = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
i = __i ||
return new this.data.constructor(this.buffer, i * rowLen, len) ;
};
Mat.prototype .getCol = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0 ;
function getAllElement(__constructor){
var row = this.row,
for(var j = 0; j < row; j ){
array.push(new __constructor(this.buffer, j * rowLen i, 1 * channel));
}
}
getAllElement(this.data.constructor); >return array;
};
rowRange メソッドとcolRange メソッド
同様に、行と列を指定するメソッドも取得できます。
コードをコピーします
i = __i ||
j = __j || .row;
function getAllElement(__constructor){
var row = this.row;
for(var k = i; k <= j; k ){
array.push(new __constructor (this.buffer, k * rowLen, len));
}
}
getAllElement(this.data.constructor);
;
コードをコピーします
コードは次のとおりです。
var row = this.row
channel = this.channel; ; k ){
array.push (new __constructor(this.buffer, k * rowLen __i, (__j - __i 1) * チャネル));
}
}
getAllElement(Float64Array);
return array;
} ;
これら 4 つのメソッドはすべて Array の配列を返します。この配列rectのj行k列の要素を取得したい場合は、
rect[j][k]を使用できます。