2014-02-17 29 views

Antwort

59

Betrachtet man die Beispiele für Uint8ClampedArray und Uint8Array, sieht es so aus, als ob der Unterschied darin besteht, wie Werte behandelt werden, wenn sie zugewiesen werden.

Wenn Sie versuchen, ein Element auf ein geklammertes Array auf einen Wert außerhalb des Bereichs 0-255 zu setzen, wird als Standardwert 0 oder 255 verwendet (abhängig davon, ob der Wert kleiner oder größer ist). Ein normales Uint8Array Array nimmt nur die ersten 8 Bit des Wertes.

Beispiele:

var x = new Uint8ClampedArray([17, -45.3]); 
console.log(x[0]); // 17 
console.log(x[1]); // 0 
console.log(x.length); // 2 

var x = new Uint8Array([17, -45.3]); 
console.log(x[0]); // 17 
console.log(x[1]); // 211 
console.log(x.length); // 2 
+8

Beachten Sie auch, dass 'Uint8Array ([0,9])' ist '[0]', aber 'Uint8ClampedArray ([0,9])' ist '[1]', dh. In der geklammerten Version wird die Rundung verwendet, in der Grundversion wird der Boden verwendet. –

+0

Das OP erwähnt dies wurde für Pixelwerte in der Leinwand verwendet, ist dies eine Abkürzung für gesättigte Arithmetik? – Indolering

+0

@Felix, also 'Uint8Array' ist performanter, weil keine Grenzen überprüft werden müssen? – Pacerier