Uint8Array和Uint8ClampedArray的区别

97
在JavaScript中,Uint8ArrayUint8ClampedArray有什么区别? 我了解到Uint8ClampedArray用于canvas像素操作。那为什么会这样,有什么好处呢?
1个回答

130

看一下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

33
请注意,Uint8Array([0.9]) 的结果为 [0],但 Uint8ClampedArray([0.9]) 的结果为 [1]。也就是说,使用了阈值版本后会进行四舍五入,而基础版本则向下取整。 - dan-man
1
OP提到这是用于画布中像素值的,这是一种饱和算术的快捷方式吗? - Indolering
1
我认为Uint8Array会更快 - 除非您在使用图形的夹紧功能,这种情况下可能会更快。 - Tomachi
答案和示例都没有说明在什么情况下Uint8ClampedArray的行为会有益,也没有给出任何线索。 - Ilya
12
这些是用于图像/视频/音频处理的工具。主要特点是:它永远不会溢出/下溢。当你试图增加图像的亮度时,最大亮度值(255)+1 应该是 255,而不是溢出到零。 - J-16 SDiZ
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接