Uint8Array和Uint8ClampedArray之间的区别


73

Uint8ArrayUint8ClampedArrayJavaScript和有什么不一样?我了解这Uint8ClampedArray是与画布一起用于像素操作的。为什么会这样,好处是什么?

Answers:


95

看一下Uint8ClampedArrayUint8Array的示例,似乎区别在于分配值时如何对待值。

如果尝试将一个元素限制在一个受限制的数组中,但其值不在范围内0-255,则它将默认为0或255(取决于该值是较小还是较大)。普通Uint8Array数组仅取值的前8位。

例子:

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

22
还要注意,Uint8Array([0.9])[0]的,但Uint8ClampedArray([0.9])[1],即。夹紧版本使用四舍五入,而基本版本使用下限。
dan-man

1
OP提到这用于画布中的像素值,这是饱和算术的捷径吗?
Indolering

@Felix,因此Uint8Array性能更高,因为不需要执行边界检查?
Pacerier's

1
我认为Uint8Array会更快-除非您使用图形的夹紧功能,否则可能会更快。
Tomachi

6
@llya这些用于图像/视频/音频处理。主要功能是:永远不会溢出/下溢。当您尝试增加图像的亮度时:最大亮度(255)+1应该给出255,而不是溢出到零。
J-16 SDiZ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.